web-dev-qa-db-ja.com

コマンドの出力を色でフィルタリングする

出力をフィルタリングする方法を提供しないユーティリティを実行しています。出力のテキストには、特定の機能が失敗したことを示すものはありませんが、赤で表示されます。出力が非常に長いため、最後にいくつかのエラーが報告されたときに、エラーが発生した出力を常にスクロールして確認できるとは限りません。

赤以外のテキストを除外するにはどうすればよいですか?

擬似コード:

dolongtask | grep -color red

編集する

このコマンドは他の色も出力するので、outすべてのテキストそうではない赤をフィルタリングできる必要があります。また、テキストのカラーリングは複数行です。

13
km6zla

Grepに制御文字を検索させることができます。制御文字の一部は、端末できれいな色を作成する役割を果たします。

dolongtask | grep '[[:cntrl:]]'

たとえば、これは赤い「テスト」をgrepにエコーします。これは、制御文字で囲まれているためにそれを検出します。

$ echo -e '\033[00;31mtest\033[00m' | grep --color=none '[[:cntrl:]]'
test     <-- in red

--color=noneは、grepが一致した出力に独自の色付けを適用しないようにするためだけのものですが、制御文字がシェルによって解釈されるように、行全体を忠実に出力します。

6
savanto