【问题标题】:A regex not working with grep正则表达式不适用于 grep
【发布时间】:2012-07-04 08:40:05
【问题描述】:

刚才我正在寻找一个正则表达式,它可以检测没有用双引号括起来的字符串。我得到了在javascript 中有效的答案。我实际上正在尝试使用 grep 运行它,但它不起作用。谁能帮助我为什么这个正则表达式不起作用

示例字符串:"quick" "brown" fox jumps "over" "the" lazy dog

我正在尝试运行:echo "quick" "brown" fox jumps "over" "the" lazy dog | grep -e '(?<![\S"])([^"\s]+)(?![\S"])'

它没有输出。 linux 正则表达式与普通正则表达式有何不同。如何才能做到这一点? 请帮忙。同样参考这个链接:http://regexr.com?31eg3

【问题讨论】:

    标签: regex grep


    【解决方案1】:

    两件事,首先你需要引用整个字符串来回显,或者shell去掉双引号。那么你使用的是 perl 风格的正则表达式,所以你需要告诉 grep 使用它们来匹配 -P 选项。

    $ echo "quick" "brown" fox jumps "over" "the" lazy dog
    quick brown fox jumps over the lazy dog
    $ echo "quick" "brown" fox jumps "over" "the" lazy dog | grep -e '(?<![\S"])([^"\s]+)(?![\S"])'
    $ echo '"quick" "brown" fox jumps "over" "the" lazy dog' | grep -e '(?<![\S"])([^"\s]+)(?![\S"])'
    $ echo '"quick" "brown" fox jumps "over" "the" lazy dog' | grep -P -o -e '(?<![\S"])([^"\s]+)(?![\S"])'
    fox
    jumps
    lazy
    dog
    

    这里我添加了-o,所以匹配的内容一目了然。

    【讨论】:

      【解决方案2】:

      echo的输出:

      $ echo "quick" "brown" fox jumps "over" "the" lazy dog
      quick brown fox jumps over the lazy dog
      

      试试这个:

      $ echo '"quick" "brown" fox jumps "over" "the" lazy dog'
      

      【讨论】:

        【解决方案3】:

        第一次更正,将你的字符串用单引号括起来:

        echo '"quick" "brown" fox jumps "over" "the" lazy dog'
        
        user@machine:~$ echo '"quick" "brown" fox jumps "over" "the" lazy dog' 
        "quick" "brown" fox jumps "over" "the" lazy dog
        

        然后使用, 对 PERL 兼容的正则表达式使用 -P 选项。

        echo '"quick" "brown" fox jumps "over" "the" lazy dog' | grep -P -o '(?<![\S"])([^"\s]+)(?![\S"])'
        fox
        jumps
        lazy
        dog
        

        感谢@lynxlynxlynx 的 -o 提示,否则它只会显示整个字符串,匹配项以其他颜色突出显示。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-05-01
          • 2013-09-08
          • 2019-08-26
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多