端末に色を割り当てるコマンドの出力があるとします。黄色を含むすべての行に一致させたいです。たとえば、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
:-E
Tell grep
using(modern)拡張正規表現。このオプションは、一致する行の一致する(空でない)部分のみを印刷するように-o
指示し、各対応する部分は別々の出力行に表示されます。grep
端末に黄色を生成するコードが複数ある場合があります。使用しているコードを確認してそのコードをコマンドに含めるには、使用しているコマンドの出力を確認する必要がありますgrep
。