文字^[[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に加えて使用する必要があることも示しています(リダイレクトすることを忘れないでください)。mgccgcc 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、テキストエディターの代わりにエスケープコードを色として解釈することもできます。