至少在 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
手动添加来强制它。