在一行中搜索多个字符串,中间有多个空格

search multiple strings in a single line with multiple spaces in between

我想从我的 /etc/pam.d/su 文件中搜索下面的整行以在脚本中使用它:

    auth required pam_wheel.so use_uid

中间可能有多个空格,也可能被注释掉,有多个#

这是我正在使用的:

     grep "^#*auth +required +pam_wheel\.so +use_uid$"

,但它没有产生任何结果

我确实做错了什么,但我做错了什么?不好意思,一直对正则表达式不好

您可以使用 grep -E(扩展正则表达式)

grep -E "^\ +auth\ +required\ +pam_wheel\.so +use_uid$"

这个有效:

echo "   auth required  pam_wheel.so   use_uid" | grep -E "^\ +auth\ +required\ +pam_wheel\.so +use_uid$"

给予

   auth required  pam_wheel.so   use_uid

egrep是要走的路,但是问题说的是"multiple"spaces。可以这样做

egrep "^([[:space:]]*#)*[[:space:]]*auth[[:space:]]+required[[:space:]]+pam_wheel\.so[[:space:]]+use_uid[[:space:]]*$"

反斜杠 space“\”未列在 regex(7) 的特殊转义符中,而是可以使用 POSIX 字符 class。您也可以使用 blank(GNU 扩展)而不是 space 来使它仅 space/tab.

嗯,这终于对我有用了:

    [root@server4 ~]# egrep "^#*auth.*required.*pam_wheel\.so.*use_uid" /etc/pam.d/su
    #auth           required        pam_wheel.so use_uid

我认为问题在于我们如何提及空格。