只grep第一场比赛,并停止
我正在用greprecursionsearch一个目录,希望只返回第一个匹配。 不幸的是,我最后一次看到的是两个以上的事实。 似乎我有太多的争论,特别是没有得到预期的结果。 : – /
# grep -o -a -m 1 -h -r "Pulsanti Operietur" /path/to/directory
收益:
Pulsanti Operietur Pulsanti Operietur
也许grep不是最好的方法来做到这一点? 你告诉我,非常感谢。
-m 1
表示返回任何给定文件中的第一个匹配项。 但它仍然会继续search其他文件。 另外,如果在同一行中有两个或更多匹配,则将显示全部。
你可以使用head -1
来解决这个问题:
grep -o -a -m 1 -h -r "Pulsanti Operietur" /path/to/dir | head -1
grep-a-like程序ack
有一个-1
选项,在任何地方find的第一个匹配处停止。 它支持@mvp所指的-m 1
。 我把它放在那里,因为如果我正在search一个大的源代码树来find我知道的东西只存在于一个文件中,没有必要find它,必须按Ctrl-C。
您可以将grep
结果与stdbuf结合使用。
请注意,为了确保在第N次匹配之后停止,您需要使用stdbuf
来确保grep
不会缓冲其输出:
stdbuf -oL grep -rl 'pattern' * | head -n1 stdbuf -oL grep -o -a -m 1 -h -r "Pulsanti Operietur" /path/to/dir | head -n1 stdbuf -oL grep -nH -m 1 -R "django.conf.urls.defaults" * | head -n1
只要head
消耗1行,它终止, grep
将收到SIGPIPE
因为它仍然输出的东西pipe道,而head
走了。
这假定没有文件名包含换行符。
单行,用find
:
find -type f -exec grep -lm1 "PATTERN" {} \; -a -quit