Bash不是在管道之后等待完整的结果,而是直接输出直接输出

时间:2015-12-19 20:57:11

标签: bash grep pipe tail

使用grep -r "something" .时,会在找到内容时打印输出。

每当使用管道进行后处理时,它会等待直到收到所有输出。

是否有一些方法/句法用于每行管道?

不要为改进示例而烦恼,它只是一个例子:

grep -r "something" . | grep -v "somethingelse"  # excluding somethingelse

结果只会在搜索完所有内容之后(由于管道|),但我正在寻找语法,它会响应来自grep -r "something" .的每一行,因为“行变为可用”。

可以管道到等待输入的程序并处理到达它的任何内容,但是使用管道只会完全发送数据吗?

有没有人有想法?

2 个答案:

答案 0 :(得分:1)

使用grep的{​​{1}}选项:

--line-buffered

答案 1 :(得分:1)

使用grep,您可以使用--line-buffered选项。如果程序没有类似的选项,您可以使用stdbuf程序,例如:

tail -f access.log | stdbuf -oL cut -d ' ' -f1 | uniq

在此示例中,stdbuf运行cut程序,其输出流被修改为行缓冲。