Linux中tail多次grep没有显示出预期结果

说明

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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。