2010-03-26 95 views
3

我試圖使用grep過濾webserver日誌文件。我需要輸出所有包含65.55的行。但排除那些包含msnbot的匹配行。正則表達式併入排除(即「不包含」)爲grep

我的出發點是這樣的 - 但它不工作:

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

我用grep的Windows(因此雙引號),但我懷疑這事。

回答

5

我只是有兩個裏grep做到這一點:

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

通常情況下,你用2裏grep。一個用於grep你想要的模式,另一個用-v選項來排除模式。但是你可以使用awk,它可以在一個進程中完成。

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

你可以下載awk for windows here

0

最簡單的事情就是管道的第一個命令的輸出,並用grep -v

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

日誌文件需要傳遞排除線到第一個grep,而不是第二個。 – user9876 2010-03-26 13:28:05

1

如果grep的支持向前看符號,你可以使用

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

這似乎並沒有在我的設置中產生任何結果 – NickG 2010-03-26 15:22:28