说明
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 命令正在起作用,只是输出需要很长时间才能到达控制台(有的时候需要几分钟)。这是因为标准输出上的缓冲区不是每行写入的,而是每个块写入的。因此,不会在编写文件时从文件中获取每一行,而是每 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