我正在尝试使用grep过滤网络服务器日志文件。我需要输出包含 65.55。的所有行,但不包括那些包含 msnbot 的匹配行。
我的出发点是 - 但它不起作用:
grep "^.*65\.55\..*(!msnbot).*$" ex100101.log > results.txt
我正在使用grep for Windows(因此是双引号),但我怀疑这很重要。
答案 0 :(得分:5)
我只是用两个greps来做:
grep "65.55" ex100101.log | grep -v msnbot > results.txt
答案 1 :(得分:2)
-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