說明
grep 命令是 Linux 中的一個常用命令,用于從大量的文本中篩選自己關注的信息荚斯。
該命令的常用方式如下:
cat file.txt | grep something
tail -1000f file.txt | grep something
但是如果在 tail 指令中击吱,有多個 grep 進行多次篩選篮条,實際存在要篩選的結果,卻沒有顯示出來性宏。
例如下面的指令:
tail -1000f file.txt | grep something | grep something_else
解決方案
實際上,grep 命令正在起作用湿刽,只是輸出需要很長時間才能到達控制臺(有的時候需要幾分鐘)晤郑。這是因為標準輸出上的緩沖區(qū)不是每行寫入的伴栓,而是每個塊寫入的。因此酵使,不會在編寫文件時從文件中獲取每一行,而是每 2 分鐘左右得到一個巨大的塊焙糟。
或者等到 tail 有更多的匹配結果后口渔,一并按塊寫入。
方案一
將前一次的搜索結果輸出到文件中穿撮,再使用 grep 進行搜索缺脉。
cat file.txt | grep something | grep something_else
方案二(推薦)
使用 grep 的 --line-buffered 按行緩沖開關來解決該問題痪欲。
tail -1000f file.txt | grep --line-buffered something | grep something_else