我想从/etc/pam.d/su文件中搜索下面的整行,以便在脚本中使用它:
auth required pam_wheel.so use_uid
中间可能有多个空格,也可能会注释掉多个#的
这就是我正在使用的:
grep "^#*auth +required +pam_wheel\.so +use_uid$"
,但它没有产生任何东西
我当然做错了什么,但我做错了什么?对不起,对于正则表达式一直很糟糕
答案 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
我认为问题在于我们如何提及空间。