如何在每次匹配之前获取文件名中的 grep 颜色?

如何在每次匹配之前获取文件名中的 grep 颜色?

如果我grep -ir "somethingtomatch" .从当前目录运行,通常会得到如下结果:

./some/path/file1.html: filecontent filecontent keyword filecontent
./some/path/file2.html: filecontent filecontent filecontent keyword
./some/path/file3.html: filecontent keyword filecontent filecontent
./some/path/file4.html: keyword filecontent filecontent filecontent

我使用过grep --color=auto -ir 'somethingtomatch" .,但它只会用红色突出显示白色关键字。我也想让左侧的文件名也用颜色编码。我该怎么做?

我在 OS X 中通过 bash 和 xterm 使用 Terminal.app(我也尝试过 xterm-color)。

答案1

您可以使用 $GREP_COLORS 环境变量更改颜色。对于您的情况,您可以尝试将export GREP_COLORS='fn=1;32'文件名的颜色更改为绿色。

答案2

您必须对输出进行后处理。类似这样的操作可能会有效:

$ grep --color -ir 'pattern' files | perl -pe 's/^([^:]+):/chomp(my $f = `ls --color \Q$1`); $f/e'

(我假设您正在显示来自 Linux 系统的输出,因为 OSXls没有为此提供有用的文件颜色。)

(注意:这个答案和那个答案的区别$GREP_COLORS在于后者使用固定颜色,而我的答案是查询ls --color。)

答案3

您可以使用 ack,它允许您为文件名、行号和匹配本身设置环境变量。

http://betterthangrep.com/

相关内容