显示请求的匹配数后,grep不会终止

时间:2015-12-28 23:55:54

标签: android bash grep adb

我正在尝试使用grep输出第一个匹配并终止。在我的例子中,被搜索的流来自Android logcat,但这可能无关紧要:

adb logcat | grep -m1 SomeFilter

我使用-m选项将结果限制为单个匹配。如果输入流包含多个匹配项,则会显示第一个匹配项,并且grep将按预期终止。但是,如果输入流中只有一个匹配项,则会显示匹配项,但grep永远不会终止。知道为什么吗?

2 个答案:

答案 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)