具有典型的Apache訪問日誌去,你可以運行:管道尾部輸出雖然grep的兩倍
tail -f access_log | grep "127.0.0.1"
它將只顯示你指定的IP地址的記錄(因爲它們是創建)。
但是,爲什麼當您通過grep
再次對其進行管道操作時會失敗,以進一步限制結果?
例如,一個簡單的排除 「的.css」:
tail -f access_log | grep "127.0.0.1" | grep -v ".css"
不會顯示任何輸出。
具有典型的Apache訪問日誌去,你可以運行:管道尾部輸出雖然grep的兩倍
tail -f access_log | grep "127.0.0.1"
它將只顯示你指定的IP地址的記錄(因爲它們是創建)。
但是,爲什麼當您通過grep
再次對其進行管道操作時會失敗,以進一步限制結果?
例如,一個簡單的排除 「的.css」:
tail -f access_log | grep "127.0.0.1" | grep -v ".css"
不會顯示任何輸出。
我相信這裏的問題是,第一個grep是緩衝輸出,這意味着第二個grep在緩衝區刷新之前不會看到它。
嘗試增加你的第一次的grep的--line-buffered
選項:
tail -f access_log | grep --line-buffered "127.0.0.1" | grep -v ".css"
這是緩衝的結果,當有足夠的數據可用時,它最終會打印。
通過肖恩·奇的建議,或者如果stdbuf
可用,你可以得到同樣的效果使用--line-buffered
選項:
tail -f access_log | stdbuf -oL grep "127.0.0.1" | grep -v ".css"
謝謝Thor,你也是對的,但我認爲Shawn就在你面前。 –
參見[尾巴上雙-f的grep沒有給出輸出(HTTP: //unix.stackexchange.com/a/164681/20661) – rubo77