我使用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|'
}
答案 0 :(得分:1)
在尝试了其他一些可能性后,我终于找到了:
为此, grep
模式与sed
模式相同
我的完整功能是:
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_'
}
我仍然愿意接受任何意见,建议,改进,贡献...... 干杯; - )