相关文章推荐
狂野的皮蛋  ·  Android Audio代码分析13 - ...·  10 月前    · 
暴走的豆芽  ·  DataAdapter.Fill ...·  11 月前    · 
英俊的遥控器  ·  Java NIO ...·  1 年前    · 

这个问题似乎不是关于 一个特定的编程问题,一个软件算法,或主要由程序员使用的软件工具 . If you believe the question would be on-topic on 另一个Stack Exchange网站 ,你可以留下评论,说明问题可能在哪里能够得到解答。

Closed 9个月前 .

The community reviewed whether to reopen this question 9个月前 并将其关闭。

原有的关闭原因没有解决

我怎样才能使用 grep 在Linux上只显示文件名(没有行内匹配)?

我通常在使用类似的东西。

find . -iname "*php" -exec grep -H myString {} \;

我怎样才能只得到文件名(含路径),而不得到匹配的文件?我是否必须使用xargs?我在grep手册中没有看到这样做的方法。

5 个评论
你的意思是,你想要至少有一个匹配的文件名?
好问题。实际上,我开始使用这个方法来打开Vim中grep返回的文件列表。【替换代码0
你不能用grep命令列出文件,它基本上是用来从一个文件或一个列表中获取所需的文本。例如,ps aux | grep 'apt-get' 或 grep 'text-to-find' /path/to/file/。
@iamjayp 嗯,你也可以用grep命令列出文件。grep -lr 'text-to-find' ./*就很好用了!
得到一千多票的问题,不符合Stack Overflow的要求。是不是要求有问题?
linux
grep
cwd
cwd
发布于 2011-07-10
4 个回答
Random832
Random832
发布于 2020-04-11
已采纳
0 人赞同

标准选项grep -l(也就是小写的L)可以做到这一点。

From the Unix标准:

(The letter ell.) Write only the names of files containing selected lines to standard output. Pathnames are written once per file searched. If the standard input is searched, a pathname of (standard input) will be written, in the POSIX locale. In other locales, standard input may be replaced by something more appropriate in those locales.

在这种情况下,你也不需要-H

-H也会显示匹配的内容。问题是只针对文件名。
@Hauke 而我的答案是-l。我提到-H只是因为问题中用户的命令包括-H,而当给出-l时,它是多余的。
很好,我个人喜欢与其他标志grep -nrl "some text" .一起使用,当在一组子文件夹中递归地寻找文本时。
ell的助记符是什么?
"fiL搭配"。
Ignacio Vazquez-Abrams
Ignacio Vazquez-Abrams
发布于 2020-04-11
0 人赞同

来自grep(1)的手册页面。

  -l, --files-with-matches
          Suppress  normal  output;  instead  print the name of each input
          file from which output would normally have  been  printed.   The
          scanning  will  stop  on  the  first match.  (-l is specified by
          POSIX.)
    
停在第一场比赛是必要的,也是自然的。
文件中说的有点不清楚。"扫描将在第一次匹配时停止" - 表示所有的文件名都将被打印,但对匹配词的扫描将在第一次出现时停止。
@VishalP:由于我们并不关心出现在哪里,只关心它们是否存在,所以在第一个出现之外搜索每个文件没有意义。
@IgnacioVazquez-Abrams 没错。该文件的第一印象让你觉得它只会打印第一个文件的文件名。你真的需要多读几遍才能理解它。
'对当前文件的扫描将在第一次匹配时停止。'会更清楚。
user2350426
user2350426
发布于 2020-04-11
0 人赞同

对于一个简单的文件搜索,你可以使用grep的-l-r选项。

grep -rl "mystring"

所有的搜索都是由grep完成的。当然,如果你需要根据一些其他参数来选择文件。find is the correct solution:

find . -iname "*.php" -execdir grep -l "mystring" {} +

选项execdir在每个目录下建立每个grep命令,并将文件名串联成一个命令(+)。

apl
apl
发布于 2020-04-11
0 人赞同

My command suggestion for getting the filename with path

sudo find /home -name *.php