【问题标题】:Exclude loremABCipsum when grepping ABC [duplicate]grepping ABC 时排除 loremABCipsum [重复]
【发布时间】:2014-01-20 07:36:08
【问题描述】:

如何忽略 grep 中的某些结果? 例如,我需要找到除 loremABCipsum 和 xyzABC123 之外的所有包含 ABC 的行。

【问题讨论】:

    标签: regex grep


    【解决方案1】:

    使用管道:

    grep -e ABC [filename] | grep -v loremABCispum | grep -v xyzABC123
    

    【讨论】:

      【解决方案2】:

      假设您的 grep 版本支持 PCRE,请使用否定前瞻:

      grep -P '(?!=xyz|lorem)ABC(?!123|ipsum)' filename
      

      【讨论】:

      • ...除非你也有xyzABCipsum
      • @tripleee 没错,在这种情况下,最好的选择可能是grep ABC filename | grep -vP 'xyzABC123|loremABCipsum'
      【解决方案3】:

      您可以使用awk

      awk '/ABC/ {if (!/xyzABC123|loremABCipsum/) print}' file
      

      这将打印所有带有ABC 的行,但如果有xyzABC123loremABCipsum,则不会打印


      一个合乎逻辑的测试版本:

      awk '{f=0} /ABC/ {f=1} /xyzABC123|loremABCipsum/ {f=0} f' file
      

      【讨论】:

      • 这将过滤掉匹配 ABC xyzABC123 - 不清楚 OP 想要以哪种方式处理这个问题,但我想它不应该被过滤。
      • 可能是这样,但如果需要可以整理出来。但是当我读到它时,他不喜欢包含xyzABC123|loremABCipsum 的行,所以应该没问题。
      猜你喜欢
      • 2018-12-13
      • 1970-01-01
      • 2016-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-29
      相关资源
      最近更新 更多