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

包含GREP排除(即“不包含”)的正则表达式

  •  3
  • NickG  · 技术社区  · 15 年前

    我正在尝试使用grep过滤web服务器日志文件。我需要输出所有包含 65.55。 但排除那些包含 MSNBT .

    我的出发点是这样的-但它不起作用:

    grep "^.*65\.55\..*(!msnbot).*$" ex100101.log > results.txt
    

    我正在使用grep for windows(因此使用双引号),但我怀疑这一点。

    4 回复  |  直到 15 年前
        1
  •  5
  •   reko_t    15 年前

    我只需要两个greps:

    grep "65.55" ex100101.log | grep -v msnbot > results.txt
    
        2
  •  2
  •   ghostdog74    15 年前

    一般来说,你用2个greps。一个是你想要的图案,另一个是 -v 排除模式的选项。不过,您可以使用awk,它可以在一个过程中完成这一切。

    awk '/.*65\.55.*/ && !/msnbot/' ext100101.log >results.txt
    

    你可以下载awk for windows here .

        3
  •  1
  •   Jens    15 年前

    如果grep支持lookaheads,您可以使用

    grep "^.*65\.55\.(?:.(?!msnbot))*$" ex100101.log > results.txt 
    
        4
  •  0
  •   sjagr    15 年前

    最简单的事情是通过管道传递第一个命令的输出,并使用grep-v排除行

    grep FINDPATTERN | grep -v EXCLUDEPATTERN LOGFILE > results.txt