关于linux:`cat` analogue用于突出显示不同颜色的不同匹配

`cat` analogue for highlighting different matches in different colors

我的问题类似于这个问题:语法高亮显示/给cat上色。但不完全一样。

一个工具,这样做会很好:

  • cat文件
  • 突出显示颜色为cx的单词x
  • 突出显示颜色为cy的单词y

等等,有人知道这样的事吗?

"现实世界的动机"是:我有一个日志(例如由log4cxx生成),我想突出显示一种颜色的DEBUG;另一种颜色的ERROR;第三种颜色的WARN等。

基本上,我想实现的是:如何设置log4cxx控制台输出的颜色?

我想到了catgrep之间的某种组合(带有自定义颜色)。但是一个外部工具也可以完成这项工作(如果存在的话)。

思想?

编辑:谢谢,@sjngm!好建议。我对它做了一点修改(现在可以用作alias,并且整个行都被突出显示)。我决定张贴我的修改,因为这可能对某人有用:

1
2
3
 # escaped ' ------------v;         light red ------vvvv;  red ------------vvvv;  yellow -------vvvvv;  green ---------vvvv;  brown ----------vvvv;  dark gray ------vvvv
 alias log_color='nawk '"'"'BEGIN { arr["FATAL"] ="1;31"; arr["ERROR"] ="0;31"; arr["WARN"] ="1;33"; arr["INFO"] ="0;32"; arr["DEBUG"] ="0;33"; arr["TRACE"] ="1;30"  } { l = $0; for (pattern in arr)     { gsub(".*" pattern".*","\033[" arr[pattern]"m&\033[0m", l); } print l; }'"'"
 alias log_error='grep"FATAL\|ERROR\|WARN"'

示例用法:

1
2
$ cat log_file | log_color
$ cat log_file | log_error | log_color


不久前,我用nawk做了类似的事情,也用于日志文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
cat yourfile | nawk '
BEGIN {
    arr["EXCEPTION"] ="0;31";
    arr["\\[ERROR\\]"] ="1;31";
    arr["\\[WARN\\]"] ="0;31";
    arr["\\[INFO\\]"] ="1;34";
}
{
    l = $0;
    for (pattern in arr) {
        gsub(pattern,"\033[" arr[pattern]"m&\033[0m", l);
    }
    print l;
}'

配置部分应该与您的x => cx样式相匹配,您也可以使用tail -f而不是cat

老实说,我认为没有一个工具可以解决这个问题,因为它没有那么复杂。


在这里,您将找到一个SED包装器,它只接受颜色和模式作为命令行参数:

https://stackoverflow.com/a/13593327/1033410

(用法:cat yourfile colorize.sh red error yellow warn blue'user.*logged in')