[英]Appending a line just after the matched pattern in sed not working
My /etc/pam.d/system-auth-ac
has the below auth
parameters set: 我的/etc/pam.d/system-auth-ac
设置了以下auth
参数:
auth required pam_env.so
auth sufficient pam_unix.so nullok try_first_pass
auth requisite pam_succeed_if.so uid >= 500 quiet
auth required pam_deny.so
I want to insert pam_tally2.so
just after pam_env.so
. 我想在pam_env.so
之后插入pam_tally2.so
。 So I want it to be: 所以我希望它是:
auth required pam_env.so
auth required pam_tally2.so onerr=fail audit silent deny=5 unlock_time=900
auth sufficient pam_unix.so nullok try_first_pass
auth requisite pam_succeed_if.so uid >= 500 quiet
auth required pam_deny.so
The script that I'm using is : 我正在使用的脚本是:
#! /bin/bash
grep "pam_tally2" /etc/pam.d/system-auth-ac &> /dev/null
if [ $? -ne 0 ];
then
sed -i '/^[]*account[]*required[]*pam_unix.so/aauth\trequired\tpam_tally2.so onerr=fail audit silent deny=5 unlock_time=900' /etc/pam.d/system-auth-ac
else
sed -i 's/.*pam_tally2.*/auth\trequired\tpam_tally2.so onerr=fail audit silent deny=5 unlock_time=900/1' /etc/pam.d/system-auth-ac
fi
But it gives this error: 但是它给出了这个错误:
sed: -e expression #1, char 116: unterminated address regex
What am I doing wrong ? 我究竟做错了什么 ?
You can use a
command in gnu-sed: 您可以使用a
在GNU-sed的命令:
sed -i.bak '/pam_env\.so$/a\
auth required pam_tally2.so onerr=fail audit silent deny=5 unlock_time=900
' /etc/pam.d/system-auth-ac
EDIT: Looking at your posted answer it seems this awk
command will be more suitable for you than grep
and 2 sed
commands in if/else
condition: 编辑:看着您发布的答案,在if/else
条件下,此awk
命令似乎比grep
和2 sed
命令更适合您:
val='auth\trequired\tpam_tally2.so onerr=fail audit silent deny=5 unlock_time=900'
awk -v val="$val" '/^auth[[:blank:]]+required[[:blank:]]+pam_env\.so/ {
print $0 RS val; next} /pam_tally2\.so/{next} 1' /etc/pam.d/system-auth-ac
auth required pam_env.so
uth required pam_tally2.so onerr=fail audit silent deny=5 unlock_time=900
auth sufficient pam_unix.so nullok try_first_pass
auth requisite pam_succeed_if.so uid >= 500 quiet
auth required pam_deny.so
You may use the below sed command. 您可以使用以下sed命令。
sed 's/^auth[[:blank:]]\+required[[:blank:]]\+pam_env\.so/&\nauth required pam_tally2.so onerr=fail audit silent deny=5 unlock_time=900' file
Your regex fails because you're repeating an empty character class []
, zero or more times, which won't make any sense. 您的正则表达式失败是因为您要重复一个空字符类[]
零次或更多次,这毫无意义。 So you need to change []*
to [ ]*
or <space>*
to repeat an empty space character zero or ore times. 因此,您需要将[]*
更改为[ ]*
或<space>*
以重复零个空格或零次的空白字符。
My Script actually should have been: 我的脚本实际上应该是:
#! /bin/bash
grep "pam_tally2" /etc/pam.d/system-auth-ac &> /dev/null
if [ $? -ne 0 ];
then
sed -i '/^[ ]*auth[ ]*required[ ]*pam_env.so/aauth\trequired\tpam_tally2.so onerr=fail audit silent deny=5 unlock_time=900' /etc/pam.d/system-auth-ac
else
sed -i 's/.*pam_tally2.*/auth\trequired\tpam_tally2.so onerr=fail audit silent deny=5 unlock_time=900/1' /etc/pam.d/system-auth-ac
fi
Works fine! 工作正常!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.