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

    最佳答案

    你应该写成

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

    online demo

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

    详细信息
  • [[:space:]"'"'"'`(,:;<[{|~]-转换为[[:space:]"'`(,:;<[{|~]并匹配空格,"'`(,:;<[{|~
  • [][:space:]"'"'"'),:;>`}|~]转换为[][:space:]"'),:;>`}|~]并匹配],空格,"'),:;>`}|~
  • 关于regex - grep -E具有多个元字符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56731154/

    10-12 18:30