私は巨大なログファイルからパターンを取得するために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 }
'