我正在使用特定的正则表达式,我需要传递给grep -E
用普通英语,如果正则表达式必须同时符合以下两个条件,则该单词必须与该单词匹配:
该单词从行首开始,或者以空格字符或以下任何“'`(,:;; <[{|〜
单词以“'),:;;]`} |〜或空格字符结尾,或在行的结尾。
####should be matched#### ignore the red text#########3
suvoo:
:suvoo:
suvoo
suvoo:
suvoo'
suvoo`
`suvoo`
"suvoo"
'suvoo:
'suvoo "ghj
'suvoo
[suvoo~
{suvoo'
his name was `suvoo'
his name is suvoo and he is 25
####shouldnt be matched####
asddsuvooaed
:suvo@abc:
suvooo
1suvoo
suvoo1:
我不确定为什么我的命令不匹配任何内容,我可能完全误解了需要转义的内容等
grep -Einr "(^|[[:space:][\"'(,:;<[\`{|~]])suvoo([[:space:][]\"'),:;>\`}|~]]|$)" .
答案 0 :(得分:3)
您应该将其写为
grep -E '(^|[[:space:]"'"'"'`(,:;<[{|~])suvoo([][:space:]"'"'"'),:;>`}|~]|$)'
请参见online demo
您放错了方括号,请注意,括号表达式内的]
应该放在最开始的位置。另外,由于引号混合使用,因此使用通用的technique to use single quotes inside single quotes更为安全。
详细信息
[[:space:]"'"'"'`(,:;<[{|~]
-转换为[[:space:]"'`(,:;<[{|~]
并匹配空白"
,'
,`
,(
,,
, :
,;
,<
,[
,{
,|
或~
。[][:space:]"'"'"'),:;>`}|~]
转换为[][:space:]"'),:;>`}|~]
并匹配]
,空格,"
,'
,)
,,
,{ {1}},:
,;
,>
,`
,}
或|
。