在一行中搜索多个字符串,中间有多个空格
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
我认为问题在于我们如何提及空格。
我想从我的 /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
我认为问题在于我们如何提及空格。