bash,链接grep命令,处理数据来

时间:2017-10-14 13:30:36

标签: bash grep pipe io-buffering

当我使用单个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

一切都很好。 'a'立刻出现,然后'ab'等等。

但是当我管道多个这样的grep命令时

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

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

为什么?

如何在不丢失'过程和输出'属性的情况下链接/级联多个greps?

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

1 个答案:

答案 0 :(得分:1)

有一个名为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