如何使用find…-exec grep返回文件名和行号?


45

使用时find,如何在搜索字符串时返回文件名和行号?我设法在一个命令中返回文件名,并在另一个命令中返回行号,但是我似乎无法将它们组合在一起。

档案名称: find . -type f -exec grep -l 'string to search' {} \;

行号: find . -type f -exec grep -n 'string to search' {} \;

Answers:


51

命令行开关-H强制grep打印文件名,即使只有一个文件也是如此。

% grep -n 7 test.in
7:7
% grep -Hn 7 test.in
test.in:7:7

   -H, --with-filename
          Print the filename for each match.

请注意,正如Kojiro评论中所说,这不属于POSIX标准;它在GNU和BSD grep中都存在,但是某些系统可能没有它(例如Solaris)。


4
可以通过指出-Hto 的标志grep非标准的GNU扩展并为非GNU系统提出替代方法来改善此答案。
kojiro 2012年


-1

如果您的grep支持递归-r标志,则可以解决您的请求:

grep -rn "String to search " * 

1
没错,但是我看不到现有答案会增加什么。
通配符

如果当前目录中只有一个文件(非点文件),则不会显示文件名。
G-Man说'Resstate
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.