如何递归搜索目录以查找模式并仅打印出文件名和行号

Rup*_*ott 7 grep

目前我使用 grep 如下:

grep -lr <PATTERN> .
Run Code Online (Sandbox Code Playgroud)

这给了我以下输出,包含其内容(不是名称)包含的所有文件的列表:

./path/to/file1
./path/to/file2
...
Run Code Online (Sandbox Code Playgroud)

这没关系,但知道行号会很有用。以下输出将是理想的,但通过 grep 的手册页,我似乎无法找出正确的开关:

./path/to/file1 15, 22, 54
./path/to/file2 16, 17
...
Run Code Online (Sandbox Code Playgroud)

这可以用 grep 或其他工具实现吗?

Roh*_*nga 5

默认情况下ack会做类似的事情。您可以使用

$ ack blah
path/to/blah
16: blah blah
19: blah blah blah

path/to/more/blah
21: blahness
Run Code Online (Sandbox Code Playgroud)

如果你只想要匹配的文件名,你可以说ack -l. ack -lc会给你每个文件的匹配数。


pol*_*mon 1

grep -rins <pattern> *
Run Code Online (Sandbox Code Playgroud)

这符合您的要求吗?

如果您有更复杂的模式,例如使用 时egrep,则使用它可能会很有用egrep -rinos <pattern> *

为了进一步提高可读性,请添加--color到参数列表中。就我个人而言,我的.zshrc

export GREP_OPTIONS="--color"
Run Code Online (Sandbox Code Playgroud)