grepの結果をさまざまな色で強調表示し、一度に1色ずつ一致(最大3色)

grepの結果をさまざまな色で強調表示し、一度に1色ずつ一致(最大3色)

私は巨大なログファイルからパターンを取得するためにgrepを使用しています。なぜなら、ログファイルで、試合周辺で何が起こっているのかを見たいからです。grep -C 3 -color ...

しかし、多くのログを読んだ後、どの行がどの一致に属するかを7行ごとに区別するのが少し面倒であることがわかりました。

私の目を助け、読みやすくすることは、各ゲームに異なる色を割り当てることです。もちろん、ゲームごとに新しい色ではなく、いくつかの色、たとえば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  

1色あたり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

おすすめ記事