【发布时间】:2018-02-20 18:52:21
【问题描述】:
我正在尝试使用 head -n1 来获得第一个 grep 匹配项(建议在几个地方使用)
我希望这会起作用
$ printf "x=0;\nwhile True:\n x+=1\n print x" | python | grep -w 333 | head -n1
(将永远持续的内容输入到 grep 命令中,该命令将选择一行,然后从该输出中取出第一行)
但是,没有输出,而且永远不会停止。
这按预期工作:(取第一行无限输出,没有 grep)
$ printf "x=0;\nwhile True:\n x+=1\n print x" | python | head -n1
1
Traceback (most recent call last):
File "<stdin>", line 4, in <module>
IOError: [Errno 32] Broken pipe
这很有效:(grep 输出并得到一个匹配)
$ printf "x=0;\nwhile True:\n x+=1\n print x" | python | grep -w 333
333
(并且永远不会退出)
但是,这种组合并没有达到我的预期:
$ printf "x=0;\nwhile True:\n x+=1\n print x" | python | grep -w 333 | head -n1
(从不打印任何内容,从不退出)
【问题讨论】:
-
顺便说一句,您可以使用
python -c $'x=0;\nwhile True:\n x+=1\n print x'传递带有文字换行符的字符串作为参数(而不是标准输入) -
我很好奇 - 为什么要使用 shell 打印一个循环来管道到 python 执行而不是仅仅在 shell 中编写循环:
x=0; while :; do echo $(( x+=1 )); done | grep ...? -
抱歉——我实际上并没有用那个 python 循环来做这个——只是用它作为一个永远持续下去的例子。尾随文件时也会发生同样的事情。