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

use*_*914 5 unix command-line grep

我知道我可以搜索一个字符串:

grep -n -d recurse 'snoopy' *
Run Code Online (Sandbox Code Playgroud)

然后它显示包含该字符串的每个文件名和实例,如:

file/name.txt:23    some snoopy here
file/name2.txt:59   another snoopy there
file/name2.txt:343  some more snoopy
etc...
Run Code Online (Sandbox Code Playgroud)

问题是,在很多事件中,列表很大.如何使其仅显示包含字符串的实际文件名,没有重复且没有出现?

只喜欢:

file/name1.txt
file/name52.txt
file/name28293.txt
Run Code Online (Sandbox Code Playgroud)

非常感谢任何帮助:)

aba*_*ert 14

-l标志(或者,在这两个BSD和GNU grep,--files-with-matches)你想要做什么.

POSIX规范:

仅将包含所选行的文件名写入标准输出.每个搜索的文件都应写入一次路径名.如果搜索标准输入,则应在POSIX语言环境中写入路径名"(标准输入)".在其他语言环境中,"标准输入"可以替换为在这些语言环境中更合适的内容.

BSD和GNU都明确保证这将更有效.(较旧的BSD版本说"... grep只搜索文件,直到找到匹配,使搜索可能更便宜",较新的BSDGNU说"扫描将在第一场比赛中停止".)如果你不知道哪个grep你有它和它有哪些选项,只需键入man grepshell,你应该得到联机帮助页.