在shell中基于正则expression式的颜色突出显示输出
我想知道是否可以颜色突出显示与某些string匹配的shell命令的输出。
例如,如果我运行myCommand,输出如下:
> myCommand DEBUG foo bar INFO bla bla ERROR yak yak 
我希望所有匹配^ ERROR \ s。*的行都高亮显示为红色。
同样,我想同样的突出显示应用于输出的grep,less等…
编辑:我可能应该提到,理想情况下,我想通过我的.bashrc中的“configuration文件”选项全球启用此function。
如果你想在全局启用这个function,你需要一个terminalfunction,而不是一个你输出的进程,因为一个pipe道会对某个命令造成干扰(两个问题是stdout和stderr会显得乱七八糟,缓冲,并且有些命令在输出到terminal时performance不同)。
 我不知道有这个function的任何“传统”terminal。 这很容易在Emacs中完成,在term缓冲区中:为term-modeconfigurationfont-lock-keywords 。 
 但是,您应该仔细考虑是否真的需要这个function。 如果命令有自己的颜色(例如grep --color , ls --color )会怎么样? 也许最好是给colorizer命令定义一个简短的别名,当你想给myCommand的输出着色时,运行myCommand 2>&1|c 。 你也可以别名一些特定的永久着色命令 。 
 请注意,pipe道的返回状态是其最后一个命令,所以如果运行myCommand | c  myCommand | c ,你会得到c的状态,而不是myCommand 。 这是一个避免这个问题的bash包装,你可以使用它作为w myCommand : 
 w () { "$@" | c return $PIPESTATUS[0] } 
superuser.com有一个答案:
 your-command | grep -E --color 'pattern|$' 
要么
 your-command | grep --color 'pattern\|$' 
这将“匹配你的模式或每行的结束,只有模式突出显示…”
您可以使用以下程序:
- spc(Supercat)
 - grc(通用色彩)
 - 突出
 - histring
 - pygmentize
 - grep –color
 
你可以做这样的事情,但命令不会看到一个tty(有些人会拒绝运行或行为不同或做奇怪的事情):
 exec > >(histring -fEi error) # Bash 
你可以尝试(也许需要更多的转义):
 BLUE="$(tput setaf 4)" BLACK="$(tput sgr0)" command | sed "s/^ERROR /${BLUE}ERROR ${BLACK}/g" 
您可以使用别名和用户定义的shell函数来启用特定的命令,但不会太麻烦。 如果你着色错误,我假设你想处理stderr。 由于stderr在没有缓冲的情况下,你可能想通过FIFO发送缓冲行。
 你可以在github上使用hl命令: 
  git clone http://github.com/mbornet-hl/hl 
 然后 : 
  myCommand |  hl -r'^错误。*' 
 您可以使用$ HOME / .hl.cfgconfiguration文件来简化命令行。 
  hl是用C写的(源文件可用)。 您可以使用多达42种不同颜色的文字。 
尝试
 tail -f yourfile.log | egrep --color 'DEBUG|' 
DEBUG是您想要突出显示的文本。
使用awk。
  COLORIZE_AWK_COMMAND='{ print $0 }' if [ -n "$COLORIZE" ]; then COLORIZE_AWK_COMMAND=' /pattern1/ { printf "\033[1;30m" } /pattern2/ { printf "\033[1;31m" } // { print $0 "\033[0m"; }' fi 
那么以后你可以pipe你的输出
 ... | awk "$COLORIZE_AWK_COMMAND" 
在图案中使用printf,所以我们不打印换行符,只需设置颜色。