0

我使用grep v2.5.1并且我想在 grep 输出中为文件名着色。

我可以使用另一个带有模式的 grep 命令/[^/:]*\(:\|$\)

grep --color=always something */*    | grep --color '/[^/:]*\(:\|$\)'

同样的模式也适用于列出文件:

grep --color=always something */* -l | grep --color '/[^/:]*\(:\|$\)'

但我更喜欢命令,sed我不知道如何翻译:-(\(:\|$\)sed

例如:

echo 'dir/file: xxxx' | sed 's|/\([^/:]*\)(:|$)|/\o033[1;35m\1\o033[0m\2|'

仅供参考,我的完整功能~/.bashrc

gg() {
    find . -name .svn -prune -o -type f '(' -name '*.java' -o -name '*.h' -o -name '*.cpp' -o -name 'Make*' -o -name '*.sh' ')' -print0 |
    xargs -0 grep --color=always "$@" |
    sed 's|/\([^/:]*\)(:|$)|/\o033[1;35m\1\o033[0m\2|'
}
4

1 回答 1

1

在尝试了其他一些可能性后,我终于找到了:
greppattern is same as sedpattern for this purpose

我的完整功能是:

gg ()
{
   find . -path '*/.svn' -prune -o -type f '(' -name '*.java' -o -name '*.h' -o -name '*.hpp' -o -name '*.hxx' -o -name '*.cpp' -o -name '*.cxx' -o -name '*.c' -o -name '[Mm]akefi*[^~]' -o -name '*.sh' -o -iname '*.xml' ')' -exec grep --color=always "$@" '{}' '+' | 
   sed -u 's_\(/\|^\)\([^/:]*\)\(:\|$\)_\1\o033[1;37m\2\o033[0m\3_'
}

我仍然愿意接受任何评论、建议、改进、贡献……
干杯 ;-)

于 2012-09-24T07:49:03.070 回答