說明
grep 命令是 Linux 中的一個常用命令,用于從大量的文本中篩選自己關(guān)注的信息。
該命令的常用方式如下:
cat file.txt | grep something
tail -1000f file.txt | grep something
但是如果在 tail 指令中,有多個 grep 進(jìn)行多次篩選,實際存在要篩選的結(jié)果,卻沒有顯示出來。
例如下面的指令:
tail -1000f file.txt | grep something | grep something_else
解決方案
實際上,grep 命令正在起作用,只是輸出需要很長時間才能到達(dá)控制臺(有的時候需要幾分鐘)。這是因為標(biāo)準(zhǔn)輸出上的緩沖區(qū)不是每行寫入的,而是每個塊寫入的。因此,不會在編寫文件時從文件中獲取每一行,而是每 2 分鐘左右得到一個巨大的塊。
或者等到 tail 有更多的匹配結(jié)果后,一并按塊寫入。
方案一
將前一次的搜索結(jié)果輸出到文件中,再使用 grep 進(jìn)行搜索。
cat file.txt | grep something | grep something_else
方案二(推薦)
使用 grep 的 --line-buffered 按行緩沖開關(guān)來解決該問題。
tail -1000f file.txt | grep --line-buffered something | grep something_else