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

时间:2015-02-24 09:39:59

标签: regex linux bash grep

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

    auth required pam_wheel.so use_uid

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

这就是我正在使用的:

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

,但它没有产生任何东西

我当然做错了什么,但我做错了什么?对不起,对于正则表达式一直很糟糕

3 个答案:

答案 0 :(得分:1)

egrep是要走的路,但问题是"多个"空间。这可以像这样做

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

一个倒退的空间" \"未在regex(7)中的特殊转义中列出,而是可以使用POSIX字符类。您还可以使用空白(GNU扩展名)而不是 space 来创建此空格/制表符。

答案 1 :(得分:0)

您可以使用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

答案 2 :(得分:0)

这最终对我有用:

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

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