Linux

如何通過分頁 grep 連續流

  • October 30, 2014

我將此發布給超級使用者但沒有人接受:https ://superuser.com/questions/832578/how-to-grep-a-continuous-stream-with-paging

我想獲取一個日誌文件並過濾掉一些不相關的日誌條目,例如 INFO 級別的日誌條目。上面的 Stack Overflow 答案讓我有所收穫:

$ tail -f php_error_log | grep -v INFO

我想要的下一個部分是在這個流中進行分頁,比如少。less +F 適用於連續流,但我不能將其應用於 grep。我怎樣才能做到這一點?


自從發布該問題以來,我一直在研究它並發現它less正在等待 EOF 出現,並掛起直到它收到它(source)。這解釋了為什麼嘗試跟隨管道不起作用。我粗魯地編寫了一個簡短的腳本來做我想做的事:

#!/bin/bash
tail -f /data/tmp/test.txt | grep --line-buffered foo > /data/tmp/foo &
pid=$!
echo $pid
sleep 1
less +F /data/tmp/foo
kill $pid
rm /data/tmp/foo

我相信可以更優雅地執行此操作,也許可以使用無需直接互動即可自動清理的臨時文件。

這個怎麼樣:

grep -V INFO php_error_log | less +F

或者,您可以執行multitail php_error_log,然後在 multitail 啟動後,按e並按照提示添加要過濾的正則表達式。對於隨時間持續監控一個或多個日誌文件,multitail 是一個很好的解決方案。

引用自:https://serverfault.com/questions/640753