bash,链接 grep 命令,在数据到来时进行处理



当我使用单个 grep 命令时,它会实时处理和输出数据。

这是我test.sh的简单测试文件:

echo a
sleep 1
echo b
sleep 1
echo ab
sleep 1
echo ba
sleep 1
echo baba

我执行以下操作:

sh test.sh | grep a
a
ab
ba
ab
ba

一切都很好,所以 fa. "A"立即出现,然后是"ab",依此类推。

但是当我通过管道传输多个这样的 grep 命令时

sh ./test.sh | grep a | grep b
ab
ba
baba

我只在最后得到输出,而不是因为它来了!终端保持空,直到处理整个文件,然后一次性输出所有内容。

为什么?

如何链接/级联多个 grep 而不会丢失"过程和输出"属性?

这是为了清理和处理包含大量数据的实时巨大日志,我只有机会将过滤后的版本保存到磁盘,而不是会很快填满磁盘的巨大原始输出。

有一个名为 line-buffered 的选项:

Other Options
       --line-buffered
              Use line buffering on output.  This can cause a performance penalty.

所以:

sh ./test.sh | grep --line-buffered a | grep b

相关内容

  • 没有找到相关文章

最新更新