如何使用grep在Linux上显示文件名(没有内联匹配)?

我通常使用的是:

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

我怎么能得到文件名(路径),但没有匹配?我必须使用xargs吗?我在我的grep手册页上没有看到这样做的方法。


当前回答

获取带有路径的文件名的命令建议

sudo find /home -name *.php

这个命令在我的Linux操作系统上的输出:

compose-sample-3 / html /邮件/ contact_me.php

其他回答

从grep(1)手册页:

- l, files-with-matches 抑制正常输出;相反,打印每个输入的名称 通常从该文件打印输出。的 扫描将在第一次匹配时停止。(-l由 POSIX)。

获取带有路径的文件名的命令建议

sudo find /home -name *.php

这个命令在我的Linux操作系统上的输出:

compose-sample-3 / html /邮件/ contact_me.php

标准选项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。

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

grep -rl "mystring"

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

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

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