如何 grep 来自 STDIN 的永久字符串

如何 grep 来自 STDIN 的永久字符串

使用 bash 我试图 grep 来自 /dev/urandom 的字符串,如下所示:

tr -cd '[:lower:]' < /dev/urandom | grep -o 'test'

还尝试过:

tr -cd '[:lower:]' < /dev/urandom | grep -o 'test' | head -1

我猜想grep一直等待tr完成,因为即使将输出重定向到文件,就像> /tmp/testfile什么也没有写入文件一样。

但是,如果解析到headbefore grep,它就可以工作

tr -cd '[:lower:]' < /dev/urandom | head -c 10000 | grep -o 'test'

有没有办法让它在标准输入仍在运行时工作?如果没有,为什么这种行为是grep在输入尚未完成时不给出输出?

答案1

正如评论中所解释的那样,grep工艺线:

grep实用程序应搜索输入文件,选择与一种或多种模式匹配的行

您的输入不包含任何换行符,因此grep会无休止地等待一行来检查其参数中指定的模式。

head -c 10000通过在 10,000 个字符后“结束”该行来修复此问题。另一个解决方案是允许输入中换行,如建议经过莫斯维:

tr -cd '[:lower:]\n' < /dev/urandom | grep -o 'test'

相关内容