unix命令行…如何grep并仅显示包含字符串的文件名?

unix命令行…如何grep并仅显示包含字符串的文件名?,unix,command-line,grep,Unix,Command Line,Grep,我知道我可以使用以下命令搜索字符串: grep -n -d recurse 'snoopy' * 然后显示包含该字符串的每个文件名和实例,如: file/name.txt:23 some snoopy here file/name2.txt:59 another snoopy there file/name2.txt:343 some more snoopy etc... 问题是,由于发生了许多事件,清单是巨大的。如何使其仅显示包含字符串的实际文件名,而不显示重复项和出现项 只喜

我知道我可以使用以下命令搜索字符串:

grep -n -d recurse 'snoopy' *
然后显示包含该字符串的每个文件名和实例,如:

file/name.txt:23    some snoopy here
file/name2.txt:59   another snoopy there
file/name2.txt:343  some more snoopy
etc...
问题是,由于发生了许多事件,清单是巨大的。如何使其仅显示包含字符串的实际文件名,而不显示重复项和出现项

只喜欢:

file/name1.txt
file/name52.txt
file/name28293.txt
非常感谢您的帮助:)

您可以使用
-l
标志(或者,在BSD和GNU
grep
中,
--具有匹配项的文件)

发件人:

仅将包含选定行的文件名写入标准输出。每个搜索的文件应写入一次路径名。如果搜索标准输入,应在POSIX语言环境中写入“(标准输入)”的路径名。在其他语言环境中,“标准输入”可能会被那些语言环境中更合适的内容所取代


BSD和GNU也明确保证这将更加有效。(版本中说,“…
grep
将只搜索一个文件,直到找到匹配项,这可能会降低搜索成本”,并说“扫描将在第一次匹配时停止”。)如果您不知道您有哪个
grep
以及它有哪些选项,只需在shell中键入
man grep
,您就可以获得手册页。

您使用
-l
参数。
-l
选项也在第7版UNIX中,因此它基本上无处不在。@JonathanLeffler:busybox中的内置
grep
和其他类似的一体式微型用户是否有
-l
?我试图查找文档,但我拥有的每台
busybox
机器都禁用了内置的,
/bin/grep
/usr/bin/grep
是GNU版本……准确的回答:我不知道。然而,要声称自己是
grep
的内置替代品,它几乎必须支持
-l
。它是一个单独的可执行文件的一个原因是
grep
中可能有太多的代码。如果它包含多个regex包(PCRE加上其他各种可能包含的包),那就更是如此了。@JonathanLeffler:是的,我不知道,也不想搜索busybox及其所有竞争对手的源代码。(至少,
busybox
确实包含了
grep
,它只是在大多数机器上没有启用。)我认为把它放在“这是POSIX需求的一部分”会让人明白,你应该能够依赖它,同时你的评论强烈暗示任何POSIX之前的系统也应该拥有它…