文字^[[37m
と^[[0m
はANSIエスケープシーケンス(CSIコード)の一部です。これらの仕様も参照してください。
GNUを使用する sed
sed 's/\x1b\[[0-9;]*m//g'
\x1b
(または\x1B
)はエスケープ特殊文字です
(sed
代替\e
をサポートしません\033
)
\[
エスケープシーケンスの2番目の文字
[0-9;]*
色の値の正規表現です
m
エスケープシーケンスの最後の文字
mac macOSでは、デフォルトsed
コマンドは\e
、slmおよびsteamer25がコメントで指摘したような特殊文字をサポートしていません。代わりにgsed
を使用してインストールできますbrew install gnu-sed
。
OPのコマンドラインの例: (OPは元のポスターを意味します)
perl -e 'use Term::ANSIColor; print color "white"; print "ABC\n"; print color "reset";' |
sed 's/\x1b\[[0-9;]*m//g'
Tom Haleは、グラフィックモード(色)エスケープシーケンスに固有[a-zA-Z]
の文字だけではなく、他のすべてのエスケープシーケンスを削除することを提案していm
ます。しかし、[a-zA-Z]
幅が広すぎて、削除しすぎる可能性があります。MichałFaleńskiとMiguel Motaは[mGKH]
、[mGKF]
それぞれand を使用して、いくつかのエスケープシーケンスのみを削除することを提案しています。Britton Kerinは、エラー/警告から色を削除するためK
に加えて使用する必要があることも示しています(リダイレクトすることを忘れないでください)。m
gcc
gcc 2>&1 | sed...
sed 's/\x1b\[[0-9;]*m//g' # Remove color sequences only
sed 's/\x1b\[[0-9;]*[a-zA-Z]//g' # Remove all escape sequences
sed 's/\x1b\[[0-9;]*[mGKH]//g' # Remove color and move sequences
sed 's/\x1b\[[0-9;]*[mGKF]//g' # Remove color and move sequences
Last escape
sequence
character Purpose
--------- -------------------------------
m Graphics Rendition Mode (including Color)
G Horizontal cursor move
K Horizontal deletion
H New cursor position
F Move cursor to previous n lines
を使用して perl
sed
一部のオペレーティングシステムにインストールされているバージョンは制限されている場合があります(macOSなど)。このコマンドにperl
は、一般に、より多くのオペレーティングシステムでインストール/更新が簡単になるという利点があります。Adam Katzは、PCREで\e
(と同じ\x1b
)を使用することを提案しています。
フィルタリングするコマンドの量に応じて正規表現を選択します。
perl -pe 's/\e\[[0-9;]*m//g' # Remove colors only
perl -pe 's/\e\[[0-9;]*[mG]//g'
perl -pe 's/\e\[[0-9;]*[mGKH]//g'
perl -pe 's/\e\[[0-9;]*[a-zA-Z]//g'
perl -pe 's/\e\[[0-9;]*m(?:\e\[K)?//g' # Adam Katz's trick
OPのコマンドラインを使用した例:
perl -e 'use Term::ANSIColor; print color "white"; print "ABC\n"; print color "reset";' \
| perl -pe 's/\e\[[0-9;]*m//g'
使用法
Stuart Cardallのコメントで指摘されているように、このsed
コマンドラインはプロジェクトUltimate Ultimate Nginx Bad Bot(1000スター)で使用され、電子メールレポートをクリーンアップします;-)
more
かless -R
、テキストエディターの代わりにエスケープコードを色として解釈することもできます。