【问题标题】:Display exact matches only with grep仅使用 grep 显示完全匹配
【发布时间】:2013-10-24 20:45:29
【问题描述】:

我怎样才能只显示所有正常结束的作业?

当我尝试下面的命令时,它同时显示 OK 和 NOTOK 因为两者都有“OK”

ctmpsm -listall application | grep OK

【问题讨论】:

    标签: unix control-m


    【解决方案1】:

    您需要更具体的表达方式。试试grep " OK$"grep "[0-9]* OK"。你想选择一个匹配你想要的模式,但不会匹配你不想要的模式。该模式将取决于您的整个文件内容可能是什么样的。

    您也可以这样做:grep -w "OK",它只会匹配整个单词“OK”,例如“1 OK”,但不会匹配“1OK”或“OKFINE”。

    $ cat test.txt | grep -w "OK"
    1 OK
    2 OK
    4 OK
    

    【讨论】:

    • 这工作正常.. 但现在我正在尝试使用其他命令,例如 ctmpsm -listall application | grep -w "ABCD123" 有行显示 ABCD123ABCD123@ 但我只想要 ABCD123
    • ABCD123 之后允许的是什么?刚刚结束?空间?标签?可能是其中任何一个?
    • @aguas 如果文件后面没有任何内容(在行尾),那么您可以使用grep ".* ABCD123$" 或只使用grep " ABCD123$"。如果它自己在一条线上,那么grep "^\s*ABCD123\s*$"
    【解决方案2】:

    这可能对你有用

    grep -E '(^|\s)OK($|\s)'
    

    【讨论】:

    • 你能解释一下这里的正则表达式吗?
    • (^|\s) 表示行或空格的开头。 ($|\s) 表示行尾或空格。所以这将匹配“OK”以及“OK”或“OK”或“OK”。
    【解决方案3】:

    您可以使用-v 开关排除字符串。

    这将抓取任何以OK 结尾的行,然后删除任何包含NOT 的行:

    (如果末尾没有出现OK,只需删除$即可。)

    cat test.txt | grep 'OK$' | grep -v 'NOT'
    

    【讨论】:

    • 谢谢!我能够使用这个确切的东西来测试我的系统是否安装了 memcache。当我尝试使用 grep 时,它返回了 memcache,但也返回了 memcached,因此您的解决方案效果很好! php-memcache=$(php -m | grep 'memcache$' | grep -v 'NOT')
    【解决方案4】:

    这对我有用

    grep  "\bsearch_word\b"  text_file > output.txt  ## \b indicates boundaries. This is much faster.
    

    或者,

    grep -w "search_word" text_file > output.txt
    

    【讨论】:

      【解决方案5】:

      试试这个:

      Alex Misuno@hp4530s ~
      $ cat test.txt
      1 OK
      2 OK
      3 NOTOK
      4 OK
      5 NOTOK
      Alex Misuno@hp4530s ~
      $ cat test.txt | grep ".* OK$"
      1 OK
      2 OK
      4 OK
      

      【讨论】:

        【解决方案6】:

        试试下面的命令,因为它完美运行:

        grep -ow "yourstring"
        
        crosscheck:-
        

        从文件中删除word的实例,然后重新执行此命令,它应该显示空结果。

        【讨论】:

        • 投反对票:-o 不相关,-w 已在最高投票答案中提供。
        • 我不同意这实际上提供了更好的结果。当我使用搜索“xml”时,grep 没有返回任何超过“xml”的内容,但它返回了在 xml 之前开始的内容。像“libxml”。当我使用这个例子时,它返回了完全匹配。 php -m | grep -ow "xml"
        【解决方案7】:

        试试这个:

        grep -P '^(tomcat!?)' tst1.txt
        

        它将在 txt 文件中搜索特定的单词。这里我们尝试搜索单词tomcat

        【讨论】:

        • 您好,欢迎来到 Stack Overflow。请编辑您的答案,使其反映所提出的问题,即如何区分 OK 和 NOTOK。谢谢
        【解决方案8】:

        最近我在 grep 中遇到了一个问题。我试图匹配模式 x.y.z 并且 grep 返回 x.y-z。使用一些正则表达式我们可以克服这个问题,但是使用 grep 整个单词匹配没有帮助。由于我编写的脚本是通用脚本,因此我不能像 x.y.z 或 x.y-z 那样限制搜索特定方式..

        我想的快速方法是运行 grep 然后进行条件检查 var="x.y.z" var1=grep -o x.y.z file.txt 如果 [ $var1 == $var ] echo "模式完全匹配" 别的 echo "模式不完全匹配" 菲

        https://linuxacatalyst.blogspot.com/2019/12/grep-pattern-matching-issues.html

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-07-02
          • 1970-01-01
          • 2013-04-14
          • 2010-12-03
          • 2015-01-04
          • 1970-01-01
          相关资源
          最近更新 更多