gpt4 book ai didi

bash - 使用 head -n1 获取 osx 上 grep 的第一个匹配项

转载 作者:行者123 更新时间:2023-12-02 20:40:30 25 4
gpt4 key购买 nike

我正在尝试使用 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

(从不打印任何内容并且从不退出)

最佳答案

您需要在grep中使用--line-buffered选项:

printf "x=0;\nwhile True:\n x+=1\n print x" | python | grep --line-buffered -w 333 | head -n 1
333

根据man grep:

--line-buffered
Force output to be line buffered. By default, output is line buffered when standard
output is a terminal and block buffered otherwise.

但请注意,该命令不会退出,因为您在 python 代码中运行无限循环。

如果您希望管道在打印第一个匹配项后立即退出,请使用 awk:

printf "x=0;\nwhile True:\n x+=1\n print x" | python |& awk '$1=="333"/{print; exit}'
333

关于bash - 使用 head -n1 获取 osx 上 grep 的第一个匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46174183/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com