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

관련 정보