Regex 复杂正则表达式帮助-理解此语句中的{}

Regex 复杂正则表达式帮助-理解此语句中的{},regex,sed,Regex,Sed,我有一个正则表达式,我想弄明白。我想我已经拥有了大部分,但是我对下面{}中的部分感到迷茫。我想它会说,如果没有匹配第一部分(在{}中)的内容,那么添加后一部分 我试着具体地把它分解 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*pa

我有一个正则表达式,我想弄明白。我想我已经拥有了大部分,但是我对下面{}中的部分感到迷茫。我想它会说,如果没有匹配第一部分(在{}中)的内容,那么添加后一部分

我试着具体地把它分解

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/'

谢谢

首先,通读和可能会有所帮助。特别是关于
s/regex/replace/[flags]
{cmd;cmd…}

但你基本上是对的。带有{}的sed命令基本上是说“查找一行,如
密码充足的pam_unix.so
,如果该行不包含
记住=#
,则添加
记住=5


最后的sed会再次找到所有这些行,并将
记住=#
更改为
记住=5

首先,它可能有助于通读and。特别是关于
s/regex/replace/[flags]
{cmd;cmd…}

但你基本上是对的。带有{}的sed命令基本上是说“查找一行,如
密码充足的pam_unix.so
,如果该行不包含
记住=#
,则添加
记住=5


最后的sed会再次找到所有这些行,并将
记住=#
更改为
记住=5

谢谢!我没有足够的代表投票支持你,但我会的。如果有人可以,那就太好了。谢谢!我没有足够的代表投票支持你,但我会的。如果有人可以,那就太好了。