在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 --colorls --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,所以我们不打印换行符,只需设置颜色。