我有很多文件需要搜索一些字符串。我正在使用grep -rl 'pattern' *
查找包含该模式的文件。但是,我只对文件计数感兴趣 - 如果字符串出现在 N 个以上的文件中,我希望 grep 在命中第 N 个匹配项后立即停止(因为搜索整个文件层次结构是长时间操作)。如果它返回一些有意义的退出代码会很好,但如果这是不可能的,那么我可以wc
毫无问题地将它传递给它。
如何在匹配第 N 个文件后告诉 grep 停止搜索其他文件?
您可以将grep
结果通过管道传输到head
.
请注意,为了确保在第 N 个匹配后停止,您需要使用stdbuf
以确保grep
不缓冲其输出:
stdbuf -oL grep -rl 'pattern' * | head -n10
Run Code Online (Sandbox Code Playgroud)
一旦head
消耗了 10 行,它就会终止并grep
接收,SIGPIPE
因为它head
在消失时仍然向管道输出一些东西。
这假设没有文件名包含换行符。