如何在Linux上使用grep仅显示文件名?


1067

如何grep在Linux上仅显示文件名(无内联匹配)?

我通常使用类似:

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

我如何才能获取文件名(带有路径)却没有匹配项?我必须使用xargs吗?我的grep手册页上没有找到执行此操作的方法。


3
您的意思是,您想要具有至少一个匹配项的文件名吗?
leonbloy 2011年

4
好问题。我实际上开始使用它来打开Vim中grep返回的文件列表。vim $(grep -rl Something app/)
David Tuite

1
您不能使用grep命令列出文件,它基本上用于从文件或列表中提取所需的文本。例如,ps aux | grep'apt-get'或
grep'text

Answers:


1624

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

根据Unix标准

-l
    (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在这种情况下,您也不需要。


37
该选项的文档(通常在大多数man文件中)非常不清楚!Pfff…令人惊讶的是,男人在屁股上会是多么痛苦。
MonsieurDart 2015年

1
-H还显示比赛本身。问题仅在于文件名。
Hauke '18

@Hauke我的答案是-l。我之所以提到-H只是因为问题中的用户命令包括-H,当给出-l时它是多余的。
Random832 '18 -4-26

2
不错,我个人喜欢以grep -nrl "some text" .递归方式在一组子文件夹中查找文本时将其与其他标志一起使用
openwonk

142

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.)

4
停在第一场比赛是必要的,自然。
2014年

7
该文档使其不清楚。“扫描将在第一次匹配时停止”-表示将打印所有文件名,但是匹配单词的扫描将在第一次出现时停止。
TheMonkWhoSoldHisCode 2015年

2
@VishalP:由于我们不在乎这些事件在哪里,只有它们存在,所以搜索除了第一个事件之外的每个文件都没有意义。
伊格纳西奥·巴斯克斯

17
确实是@ IgnacioVazquez-Abrams。文档的第一印象使您感到它只会打印第一个文件的文件名。您确实需要几次阅读才能理解它。
TheMonkWhoSoldHisCode 2015年

5
“当前文件的扫描将在第一个匹配项时停止。” 会更清楚。
对不起,missmissjackson

37

对于简单的文件搜索,您可以使用grep -l-r选项:

grep -rl "mystring"

所有搜索均由grep完成。当然,如果需要在其他参数上选择文件,则find是正确的解决方案:

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

execdir选项在每个目录中构建每个grep命令,并将文件名仅连接到一个命令(+)。


0

您的问题我如何才能获得文件名(带有路径)

您的语法示例find。-iname“ * php” -exec grep -H myString {} \;

我的命令建议

sudo find /home -name *.php

我的Linux操作系统上此命令的输出:

compose-sample-3 / html / mail / contact_me.php

当您需要带路径的文件名时,请尽情享受吧!


该问题专门询问他们如何使用grep获取文件名。
snakecharmerb
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.