sed模式以特定字符或行尾结尾

时间:2012-09-24 07:43:51

标签: bash sed grep

我使用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|'
}

1 个答案:

答案 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_'
}

我仍然愿意接受任何意见,建议,改进,贡献...... 干杯; - )