代码之家  ›  专栏  ›  技术社区  ›  jerrygarciuh

使用grep进行负匹配(不包含foo的匹配线)

  •  798
  • jerrygarciuh  · 技术社区  · 14 年前

    我一直在尝试找出这个命令的语法:

    grep ! error_log | find /home/foo/public_html/ -mmin -60
    

    grep '[^error_log]' | find /home/baumerf/public_html/ -mmin -60
    

    我需要查看所有已修改的文件,除了那些名为 error_log .

    I've read about it here ,但只找到一个 not -正则表达式模式。

    3 回复  |  直到 5 年前
        1
  •  1929
  •   fedorqui    10 年前

    grep -v 是你的朋友:

    grep --help | grep invert  
    

    同时查看相关的 -L -l

    -五十、 --不匹配的文件只打印不匹配的文件名

        2
  •  161
  •   L0j1k    6 年前

    awk 出于这些目的,由于它允许您以更清晰的方式执行更复杂的检查:

    不包含的行 foo :

    awk '!/foo/'
    

    也不是 bar :

    awk '!/foo/ && !/bar/'
    

    都不包含的行 也不是 酒吧 foo2 bar2 :

    awk '!/foo/ && !/bar/ && (/foo2/ || /bar2/)'
    

    等等。

        3
  •  17
  •   Papa Smurf    9 年前

    在您的例子中,您可能不想使用grep,而是在find命令中添加一个否定子句,例如。

    find /home/baumerf/public_html/ -mmin -60 -not -name error_log
    

    如果要在名称中包含通配符,则必须对其进行转义,例如排除后缀为.log的文件:

    find /home/baumerf/public_html/ -mmin -60 -not -name \*.log