运行 find & grep,并在输出中包含路径

运行 find & grep,并在输出中包含路径

至少在 CentOS 系统和以前版本的 Fedora 上,我可以运行以下命令并获取具有相应 grep 匹配项的文件列表:

$ find -name "version.php" -type f | xargs grep "^\$wp_version" site.com/wp-includes/version.php:$wp_version = '4.7.3';

显然,至少在 Fedora 22 及更高版本上,运行相同的命令不再包含路径和文件名:

find -name "version.php" -type f | xargs grep "^\$wp_version" $wp_version = '4.7.3';

我知道我可以包含 -l 来仅显示路径,但是有没有办法包含路径而不丢失匹配项?我在 man 文件中没有看到任何内容。

答案1

CentOS/Fedora,所以假设 GNU grep,它有以下开关

-H, --with-filename
   Print the file name for each match.  This is the default 
   when there is more than one file to search.

换句话说,行为上的差异可能只是在第一种情况下, find 捕获多个文件,从而grep列出文件名。如果在第二种情况下仅匹配一个文件,则名称将丢失。

所以,-H手动添加来强制它。

相关内容