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

时间:2010-03-26 11:55:29

标签: regex grep filtering

我正在尝试使用grep过滤网络服务器日志文件。我需要输出包含 65.55。的所有行,但不包括那些包含 msnbot 的匹配行。

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

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

我正在使用grep for Windows(因此是双引号),但我怀疑这很重要。

4 个答案:

答案 0 :(得分:5)

我只是用两个greps来做:

grep "65.55" ex100101.log | grep -v msnbot > results.txt

答案 1 :(得分:2)

通常,你使用2个greps。一个用于grep你想要的模式,另一个用-v选项来排除模式。但是你可以使用awk,它可以在一个过程中完成所有操作。

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

您可以下载awk for windows here

答案 2 :(得分:1)

如果grep支持前瞻,你可以使用

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

答案 3 :(得分:0)

最简单的方法是管道第一个命令的输出并使用grep -v

排除行
grep FINDPATTERN | grep -v EXCLUDEPATTERN LOGFILE > results.txt