grep 在打印之前等待更多行[重复]

Posted

技术标签:

【中文标题】grep 在打印之前等待更多行[重复]【英文标题】:grep waits for more lines before printing [duplicate] 【发布时间】:2015-07-06 01:12:36 【问题描述】:

我将此命令放入 bash 中,希望它打印 FOO,然后等待更多输入:

(echo FOO; cat) | grep FOO | cat

相反,它什么也不打印,一直等到我按下 Ctrl+D 才会出现任何内容。

如果我最后删除|cat,问题就会消失。

这里发生了什么? grep 是否在等待更多行,并且仅在通过管道传输到其他内容时?还是 bash/cat 正在等待?

【问题讨论】:

cats 都是不必要的。当您自己说当您删除最后一只猫时问题就消失了,为什么您会认为这是 grep 等待?第一只猫是问题,你没有给它一个参数,所以它是从 STDIN 读取的。 我知道,我在发布之前简化了问题。最初最后一个cat 是另一个grep 命令,而(echo FOO; cat)tail -f。我怀疑 grep 正在等待,因为它似乎并不重要,只要它通过管道传输到某个东西。我也知道一个命令可以判断它是否在某个地方通过管道传输。例如grep 可以在命令行上使用颜色打印,但如果在某处通过管道则不可以。 我不认为cats 在这样的理论问题中是“不必要的”。 grep 不会等待,除非 grep 不匹配任何内容,否则将 tail -f 管道传输到两个 grep 不会等待输入。发布您的实际问题,而不是这显然是由猫等待引起的。 @MichaelJaros 他们怎么不能,没有他们,这个命令就可以工作,而不能和他们一起工作? 【参考方案1】:

第一个cat 正在等待输入。

grep,出于性能原因,正在分块读取,没有足够的输入,所以它只是等待。这可以通过强制读取每一行来解决:

(echo FOO; cat) | grep --line-buffered FOO | cat

【讨论】:

这仍然在等待更多的输入,所以我没有错。实际上我要承认我误读了这个问题并且完全错误,因为 Op 想要这种行为:( 当然会等待,直到stdin关闭。 谢谢!我认为这与***.com/questions/7161821/… 的问题相同,我还找到了一些信息here 和here。 RIght @JID ,它无法定义,就像原始帖子一样。 @NullSoulException: 这正是 OP 想要的。 问题是 grep 没有打印任何内容,尽管有匹配的行。

以上是关于grep 在打印之前等待更多行[重复]的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式字符与grep一致重复n次或更多次

Docker bash脚本等待容器日志包含“完成”[重复]

突出显示类似于 grep 的文本,但不过滤掉文本 [重复]

JavaScript在继续之前睡眠/等待[重复]

如何在java中传递命令行参数[重复]

正则表达式解析 & awk/sed/grep实用实例总结文档