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

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

端末に色を割り当てるコマンドの出力があるとします。黄色を含むすべての行に一致させたいです。たとえば、grepでこれをどのように実行できますか?mycommand -itSomtimesPrintsLinesWithYellowColorCodes | grep -e "?????"

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

ベストアンサー1

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を使用して$'...'[ `エスケープを使用してカラーコードを定義します。

私たちは2つのオプションを使用しましたgrep-ETell grepusing(modern)拡張正規表現。このオプションは、一致する行の一致する(空でない)部分のみを印刷するように-o指示し、各対応する部分は別々の出力行に表示されます。grep

端末に黄色を生成するコードが複数ある場合があります。使用しているコードを確認してそのコードをコマンドに含めるには、使用しているコマンドの出力を確認する必要がありますgrep

おすすめ記事