我有正则表达式,我试图理解。我想我已经掌握了大部分内容,但我在下面{}中的位置丢失了。我想它说,如果没有匹配第一部分(在{}内)的东西,那么添加后一部分。
我试图将其分解。
egrep "^\s*password\s+sufficient\s+pam_unix.so(\s+.*)$" /etc/pam.d/system-auth && sudo sed -ri '/^\s*password\s+sufficient\s+pam_unix.so\s+/ { /^\s*password\s+sufficient\s+pam_unix.so(\s+\S+)*(\s+remember=[0-9]+)(\s+.*)?$/! s/^(\s*password\s+sufficient\s+pam_unix.so\s+)(.*)$/\1remember=5 \2/ }' /etc/pam.d/system-auth && sudo sed -ri 's/(^\s*password\s+sufficient\s+pam_unix.so(\s+\S+)*\s+)remember=[0-9]+(\s+.*)?$/\1remember=5\3/' /etc/pam.d/system-auth
我试图将其分解如下......
if pattern ("^\s*password\s+sufficient\s+pam_unix.so(\s+.*)$")
sed '/^\s*password\s+sufficient\s+pam_unix.so\s+/ { /^\s*password\s+sufficient\s+pam_unix.so(\s+\S+)*(\s+remember=[0-9]+)(\s+.*)?$/! s/^(\s*password\s+sufficient\s+pam_unix.so\s+)(.*)$/\1remember=5 \2/ }'
if success
sed 's/(^\s*password\s+sufficient\s+pam_unix.so(\s+\S+)*\s+)remember=[0-9]+(\s+.*)?$/\1remember=5\3/'
由于
答案 0 :(得分:0)
首先,阅读sed command list和options可能会有所帮助。特别属于s/regex/replace/[flags]
和{ cmd ; cmd ... }
。
但你基本上是正确的。使用{}的sed命令基本上是"找到类似password sufficient pam_unix.so
的行,如果该行不包含remember=#
,请添加remember=5
" 。
最后的sed会再次查找所有这些行,并将remember=#
更改为remember=5