我正在尝试使用 grep 输出第一个匹配项并终止。在我的例子中,正在搜索的流来自 Android logcat,但这可能无关紧要:
adb logcat | grep -m1 SomeFilter
我使用 -m 选项将结果限制为单个匹配项。如果输入流包含多个匹配项,则会显示第一个匹配项,并且 grep 会按预期终止。但是,如果输入流中只有一个匹配项,则会显示该匹配项,但 grep 永远不会终止。知道为什么吗?
最佳答案
有三个想法。
1)输入流中既没有LF符号也没有EOF。
2) grep
实际上是在看到第一个匹配项后终止。但是 adb
不会终止,尽管 grep
退出并且写入管道失败。 adb
只是忽略这些写入错误并继续运行。您可以检查 grep
是否真的终止了,只需在另一个终端中键入 pgrep grep
即可。
3) 最有可能的是,如果真的只有一个匹配项,仅此而已,那么 adb
可能不再向管道写入,并且它永远不会收到写入错误和 SIGPIPE。因此 adb
仍在运行,而 grep
实际上已终止。
关于android - grep 在显示请求的匹配数后不会终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34502527/