簡體   English   中英

通過grep管道尾部輸出兩次

[英]Piping tail output though grep twice

使用典型的Apache訪問日志,您可以運行:

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"

有關詳細信息,請參閱“BashFAQ / 009 - 什么是緩沖?或者,為什么我的命令行不產生輸出: tail -f logfile | grep 'foo bar' | awk ...

這是緩沖的結果,它將在有足夠數據時最終打印。

使用Shawn Chin建議的--line-buffered選項,或者如果stdbuf可用,您可以獲得相同的效果:

tail -f access_log | stdbuf -oL grep "127.0.0.1" | grep -v ".css"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM