web-dev-qa-db-ja.com

MATCHカラーの入力をgrepする方法は?

端末用に色分けされたコマンドからの出力があるとします。黄色を含むすべてのラインに一致させたい。どうすればgrepでこれを実行できますか。例:mycommand -itSomtimesPrintsLinesWithYellowColorCodes | grep -e "?????"

注:これは、grepの出力を色付けしたり、色を追加したりするためのものではありません。これは、grepに入力される入力の色をフィルタリング/照合する方法についてのみです。

6
Zombies

tputを使用して、端末の黄色と黒のカラーコードを生成してみましょう。

$ yel=$(tput setaf 3)
$ blk=$(tput setaf 0)

黄色のコードが実際に何を含んでいるか調べてみましょう:

$ echo -n "$yel" | hexdump -C
00000000  1b 5b 33 33 6d                                    |.[33m|
00000005

これで、grepを使用して黄色のコードを検索し、黄色のコードの先頭から次のコードに一致する文字列を出力できます。

$ echo "abc ${yel}Yellow${blk} def" | grep -Eo $'\x1b\[33m.[^\x1b]*\x1b\[....'
Yellow 

黄色のカラーコードには[が含まれ、grepは正規表現のアクティブな文字と見なされることに注意してください。したがって、リテラル[と一致させるには、grepでリテラルする必要があります。これを行うには、bashの$'...'を使用して、[`をエスケープしてカラーコードを定義します。

端末で黄色を生成するコードが複数ある可能性があります。使用しているコマンドの出力を調べて、使用されているコードを判別し、それらをgrepコマンドに含めます。

9
John1024