我正在尝试使用grep输出第一个匹配并终止。在我的例子中,被搜索的流来自Android logcat,但这可能无关紧要:
adb logcat | grep -m1 SomeFilter
我使用-m选项将结果限制为单个匹配。如果输入流包含多个匹配项,则会显示第一个匹配项,并且grep将按预期终止。但是,如果输入流中只有一个匹配项,则会显示匹配项,但grep永远不会终止。知道为什么吗?
答案 0 :(得分:1)
有三个想法。
1)输入流中没有LF符号和EOF。
2)grep
实际上是在看到第一场比赛后终止的。但是adb
尽管grep
退出但仍未终止,并且写入管道失败。 adb
只是忽略这些写错误并继续运行。您只需在另一个终端输入grep
即可查看pgrep grep
是否确实已终止。
3)最有可能的是,如果真的只有一个匹配而且没有更多,那么可能adb
不再写入管道,它永远不会收到写入错误和SIGPIPE。因此adb
仍在运行,而grep
实际上已经终止。
答案 1 :(得分:0)
我知道这是一个老问题,但也许这会帮助遇到这个问题的其他人。如果您不能使用 -d 选项,另一种选择是:
&:nth-child(1n+1)