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


13

私は次の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キーワードが存在する行のみが表示されます。


1
以下のためにgrep解決策を参照unix.stackexchange.com/a/34322
manatwork

ソースコードを変更するアクセス権はありますか?それはbashスクリプトですか?
h3rrmiller

あなたは私は私の道をクリックし、指定されたリンクから@manatwork stackoverflow.com/questions/972370といくつかとtail -fし、awkマジック、私は)=行ってもいいよ
テオドール

回答:


10

manatwork他の質問の見事な小さな「または何もない」ハックに基づいて、これを提供します。これにより、2つのハイライトカラーを取得する機能が追加されます。

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

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

「01; 32」の値は「太字の緑」を意味し、他の値は「太字の赤」を意味します。その他のアイデアについては、ANSIコードに関するウィキペディアの記事を参照してください。

残念ながら、これにはGNU grepバージョン2.5.3以降が必要です。GNU grepの古いバージョンは異なる色付けメカニズムをサポートしていましたが、これらのバージョンには、パイプラインでこの機能を複数回使用できないバグがあります。BSD grepは古いGNU grepカラーリングメカニズムをエミュレートし、パイプラインで2回動作しますが、manatworkハックのために「空の部分式」について叫びます。

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


それは本当に素晴らしいです!しかし、何らかの理由で、スクリプトは私のマシンの2番目のステートメントを強調していないようです。CentOS 5を実行しています。
Theodor

2
ここで起こっているのは、CentOS 5が十分に古いGNU grepを出荷しておりGREP_COLORS、複数をサポートしていないことです。古いGREP_COLORメソッドのみを使用し、そのメソッドにはバグがあり、正しいことを実行できません。使用するコマンドGREP_COLOR=32などを変更すると、最初に一致したもののハイライト色のみが変更されます。結果をパイプ処理hexdump -cすると、2番目のegrepコマンドを追加すると何かが実行されることがわかりますが、これはANSIとしては正しくありません。結論:grepこれを正しく機能させるには、アップグレードする必要があります。
ウォーレンヤング

ハハ、それはとても洞察に満ちたコメントです。ええ、CentOS5は、古いマシンで実行される多くのOS:sのように、古いものになりつつあります。
テオドール

私はCentOSの6箱の上に私の解決策をチェックしました、そして、それはありませんが、作業を、私の診断を確認しました。(以前のテストはUbuntuサーバーで行われました。)EL6にはGNU grep 2.6.3が付属しています。興味深いことに、GREP_COLOR機能が置き換えられるとすぐに廃止されましたが、彼らは(単一の)バグも修正しました。
ウォーレンヤング

私はどのようにこの解きは何も存在しませんので、第一のgrepはすべて「FAIL」を除外しますので、問題が一致するように、第二のgrep放置..理解できない
laertis

1

これにはマルチテールまたはcczeを使用できます。どちらも、設定で一致する正規表現と色を記述することができます。


1

Warren Youngの答えに基づいて、同じことをよりエレガントに、より少ないタイピングで行うこのPythonスクリプトを書きました。このスクリプトの使用方法は次のとおりです。

cat yourfile | himul '\[OK\]' '\[FAIL\]'
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.