以不同颜色突出显示 grep 结果,每次匹配一种颜色(最多 3 种颜色)

以不同颜色突出显示 grep 结果,每次匹配一种颜色(最多 3 种颜色)

我使用 grep 在巨大的日志文件中搜索模式,因为它是一个日志文件,我想看看比赛周围发生了什么,我通常这样做grep -C 3 -color ...

然而,在阅读了大量日志后,我发现区分每7行,哪一行属于哪个匹配有点烦人,所以我想找到一种方法来区分每个匹配(以及围绕它的6行)

我认为对我的眼睛有帮助且更容易阅读的事情是让每场比赛都采用不同的颜色 - 当然并不是每场比赛都使用新颜色,而是选择几种颜色,比方说 3 种颜色,这样比赛就会按照颜色顺序着色,例如,如果我有 4 个匹配项,它们将按如下所示着色:

prefix1 match1 // purple color: start
prefix2 match1
prefix3 match1
match1:   
suffix1 match1
suffix2 match1
suffix3 match1  // purple color: end   

prefix1 match2 // blue color: start
prefix2 match2
prefix3 match2
match2:   
suffix1 match2
suffix2 match2
suffix3 match2  // blue color: end  

prefix1 match3 // green color: start
prefix2 match3
prefix3 match3
match3:   
suffix1 match3
suffix2 match3
suffix3 match3  // green color: end 

prefix1 match4 // purple color: start
prefix2 match4
prefix3 match4
match4:   
suffix1 match4
suffix2 match4
suffix3 match4  // purple color: end  

每种颜色 7 条线

所以我本质上寻找的是一种告诉 grep 这样做的方法,或者一个将 grep 重定向到的命令,以便它的颜色如上所述

答案1

像这样使用 Perl 和 core Term::ANSIColor(默认安装):

<COMMAND> | perl -MTerm::ANSIColor=:constants -pe '
    BEGIN{
       our @colors = (MAGENTA, BLUE, GREEN);
       our @cols;
    }
    @cols = @colors if not scalar @cols;
    my $color = shift @cols if /^$/ or $. == 1;
    print $color;
    END{ print RESET }
'

或者更短,谢谢@Terdon

<COMMAND> | perl -MTerm::ANSIColor=:constants -00 -pe '
       BEGIN{ @colors = (GREEN, MAGENTA, BLUE) }
       print $colors[$.%($#colors+1)];
       END{ print RESET }
'

在此输入图像描述

检查颜色功能:

perldoc 术语::ANSIColor

相关内容