パイプされた出力をgrepするときに、grepがANSIカラーエスケープを尊重するようにするにはどうすればよいですか? grep の代わりに何か他のもの (perl?) を使用しても問題ありません。
私のユーザーケース: したい
gcc foobar.c | colorgcc | grep regexp
ls --color | grep filename
色でうまく動作します (ANSI エスケープを使用する UNIX 端末で)。
私が望む動作のテスト例:
echo -e "he\e[35mllo\e[00m" world |grep hell ==> he\e[35mllo\e[00m world
echo -e "\e[35m removed line\nhello\e[00m" world |grep hell ==> \e[35mhello\e[00m world
echo -e "\e[35m rem\e[1moved line\nhello\e[00m" world | grep hell ==> \e35m\e1mhello\e[00m world
現在、最初の行は空の文字列を示し、2 行目は色付けされていない文字列 'hello\e[00m world' を示しています。ここで、\e[35m と \e00m は色 (属性) 修飾子です。文字の色は、形式 \e[P1; の最後のいくつかの色 (属性) エスケープ シーケンスによって決まります。P2; .. m ここで、P1、P2 などは一連の数字です。\e[P1m\e[P2m は \e[P1;P2m と同等です。\e[0m は色をデフォルトにし、以前のすべての \e[..m シーケンスを忘れます: \e[34m\e[0m は \e[0m と同等です。いくつかの独立した属性 (太さ、背景の色、前景/文字の色) があります。エスケープ シーケンス内の各数値は、そのうちの 1 つのみに影響します。したがって、 \e[1m\e[35m は \e[1;35m と同等ですが、 \e[35;1m や \e[35m ; とは異なります。ただし、\e[34m\e[35m は \e[35m と同等です。どちらも同じ属性に影響するからです (つまり、