端末用に色分けされたコマンドからの出力があるとします。黄色を含むすべてのラインに一致させたい。どうすればgrepでこれを実行できますか。例:mycommand -itSomtimesPrintsLinesWithYellowColorCodes | grep -e "?????"
注:これは、grepの出力を色付けしたり、色を追加したりするためのものではありません。これは、grepに入力される入力の色をフィルタリング/照合する方法についてのみです。
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
コマンドに含めます。