我試圖使用grep過濾webserver日誌文件。我需要輸出所有包含65.55的行。但排除那些包含msnbot的匹配行。正則表達式併入排除(即「不包含」)爲grep
我的出發點是這樣的 - 但它不工作:
grep "^.*65\.55\..*(!msnbot).*$" ex100101.log > results.txt
我用grep的Windows(因此雙引號),但我懷疑這事。
我試圖使用grep過濾webserver日誌文件。我需要輸出所有包含65.55的行。但排除那些包含msnbot的匹配行。正則表達式併入排除(即「不包含」)爲grep
我的出發點是這樣的 - 但它不工作:
grep "^.*65\.55\..*(!msnbot).*$" ex100101.log > results.txt
我用grep的Windows(因此雙引號),但我懷疑這事。
我只是有兩個裏grep做到這一點:
grep "65.55" ex100101.log | grep -v msnbot > results.txt
通常情況下,你用2裏grep。一個用於grep你想要的模式,另一個用-v
選項來排除模式。但是你可以使用awk,它可以在一個進程中完成。
awk '/.*65\.55.*/ && !/msnbot/' ext100101.log >results.txt
你可以下載awk for windows here。
最簡單的事情就是管道的第一個命令的輸出,並用grep -v
grep FINDPATTERN | grep -v EXCLUDEPATTERN LOGFILE > results.txt
如果grep的支持向前看符號,你可以使用
grep "^.*65\.55\.(?:.(?!msnbot))*$" ex100101.log > results.txt
這似乎並沒有在我的設置中產生任何結果 – NickG 2010-03-26 15:22:28
日誌文件需要傳遞排除線到第一個grep,而不是第二個。 – user9876 2010-03-26 13:28:05