2012-09-24 43 views
0

我使用grep v2.5.1,我想在grep输出中着色文件名。sed模式以特定字符结尾或行尾

我可以用另一个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 "[email protected]" | 
    sed 's|/\([^/:]*\)(:|$)|/\o033[1;35m\1\o033[0m\2|' 
} 

回答

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 "[email protected]" '{}' '+' | 
    sed -u 's_\(/\|^\)\([^/:]*\)\(:\|$\)_\1\o033[1;37m\2\o033[0m\3_' 
} 

我仍然对任何意见,建议,改进,贡献...
欢呼声;-)

相关问题