如何使用grep在Linux上显示文件名(没有内联匹配)?
我通常使用的是:
find . -iname "*php" -exec grep -H myString {} \;
我怎么能得到文件名(路径),但没有匹配?我必须使用xargs吗?我在我的grep手册页上没有看到这样做的方法。
如何使用grep在Linux上显示文件名(没有内联匹配)?
我通常使用的是:
find . -iname "*php" -exec grep -H myString {} \;
我怎么能得到文件名(路径),但没有匹配?我必须使用xargs吗?我在我的grep手册页上没有看到这样做的方法。
当前回答
对于一个简单的文件搜索,你可以使用grep的-l和-r选项:
grep -rl "mystring"
所有的搜索都由grep完成。当然,如果你需要在其他参数上选择文件,find是正确的解决方案:
find . -iname "*.php" -execdir grep -l "mystring" {} +
execdir选项为每个目录构建每个grep命令,并将文件名连接为一个命令(+)。
其他回答
从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命令,并将文件名连接为一个命令(+)。