[英]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.