grep -E具有多个元字符

时间:2019-06-24 06:48:12

标签: regex linux grep

我正在使用特定的正则表达式,我需要传递给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:][]\"'),:;>\`}|~]]|$)" .

1 个答案:

答案 0 :(得分:3)

您应该将其写为

grep -E '(^|[[:space:]"'"'"'`(,:;<[{|~])suvoo([][:space:]"'"'"'),:;>`}|~]|$)'

请参见online demo

您放错了方括号,请注意,括号表达式内的]应该放在最开始的位置。另外,由于引号混合使用,因此使用通用的technique to use single quotes inside single quotes更为安全。

详细信息

  • [[:space:]"'"'"'`(,:;<[{|~]-转换为[[:space:]"'`(,:;<[{|~]并匹配空白"'`(,:;<[{|~
  • [][:space:]"'"'"'),:;>`}|~]转换为[][:space:]"'),:;>`}|~]并匹配],空格,"'),,{ {1}},:;>`}|