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