web-dev-qa-db-ja.com

キーワードの出現箇所を別の色でマーク

次のようなstdoutに出力を出力するプログラムがあります。

[OK]      Something is ok
[OK]      Something else is also ok
[FAIL]    This does not look good
[FAIL]    Neither does this
[OK]      At least this is fine

出力からの失敗をより簡単に見つけるために、キーワードFAILの出現を赤でマークしますなし他のメッセージを破棄します。 OKキーワードも緑で強調表示できればいいですね:).

egrep --color FAILへのパイプを実行すると、FAILキーワードが存在する行のみが表示されます。

13
Theodor

他の質問でのmanatworkの素晴らしい小さな「または何もない」ハックに基づいて、これを提供します。これにより、twoハイライトを取得する機能が追加されます色:

 $ myprogram | \
   GREP_COLORS='mt=01;32' egrep --color=always '\[OK\]|' | \
   GREP_COLORS='mt=01;31' egrep --color=always '\[FAIL\]|'

つまり、毎回異なるGREP_COLORS環境変数を使用して、出力に対してgrepを2回実行します。

'01; 32 'の値は「ボールドグリーン」を意味し、もう1つは「ボールドレッド」を意味します。その他のアイデアについては、ウィキペディア ANSIコードに関する記事 を参照してください。

悲しいかな、これにはGNU grepバージョン2.5.3以降が必要です。古いバージョンのGNU grepは別のカラーリングメカニズムをサポートしていましたが、これらのバージョンにはBSD grepは、古いGNU grepカラーリングメカニズムをエミュレートし、パイプラインで2回機能しますが、「空のサブ式」と叫びます。 manatworkハックのため。

最初の2行の最後にあるバックスラッシュを削除して、すべて1行にすることができます。ここでは、わかりやすくするため、およびSEページ形式でニースを再生するために、ここで分割しました。

10
Warren Young

これにはmultitailまたはcczeを使用できます。どちらの場合も、構成で一致する正規表現と色を記述できます。

1
Netch

ウォーレンヤングの回答に基づいて、私は this Python script と記述しましたが、これは同じことをよりエレガントに、入力を大幅に減らしたものです。脚本:

cat yourfile | himul '\[OK\]' '\[FAIL\]'
1
kirubakaran