目錄
- Grep的多次管道過濾問題
- 如何解決
- line-buffered 是什么
- 總結
Grep的多次管道過濾問題
在日常的開發過程中,我們利用grep可以方便快捷的查找感興趣的日志內容,極大地提升了開發和排錯效率。但是有時候,我們也會遇到一些問題,比如。
- crazy.log 是某個進程不斷輸出日志的文件
- 我們使用tail -f crazy.log來檢測日志的產生
- 我們在前面的基礎上利用管道增加一層過濾篩選感興趣的內容。
tail -f crazy.log | grep Hello Hello,printting from Ruby Hello,Time is 1566096393 Hello,printting from Ruby Hello,Time is 1566096393 Hello,printting from Ruby Hello,Time is 1566096393 Hello,printting from Ruby Hello,Time is 1566096393 Hello,printting from Ruby Hello,Time is 1566096393
那么當我們再次增加一個過濾是,卻沒有內容(立即)產生了
? /tmp tail -f crazy.log | grep Hello | grep Time
如何解決
tail -f crazy.log | grep --line-buffered Hello | grep Time Hello,Time is 1566096393 Hello,Time is 1566096393 Hello,Time is 1566096393 Hello,Time is 1566096393 Hello,Time is 1566096393
如上,我們使用grep的選項–line-buffered即可。
line-buffered 是什么
–line-buffered
Force output to be line buffered. By default, output is line buffered when standard output is
a terminal and block buffered otherwise.
上面的意思是
- 強制輸出結果使用行緩沖
- 默認情況下,如果標準輸入時終端,則使用line bufferred
- 否則,使用塊緩沖,(默認的大小為4096 bytes,因系統和配置而異)
所以,這也就解釋了為什么雙重grep過濾沒有內容,因為沒有達到塊緩沖限制。
以上。
總結
這些僅為個人經驗,希望能給大家一個參考,也希望大家多多支持。