重複の可能性:
スクリプト出力から制御文字(コンソールコード/色付き)を削除する
私は私が書いているプログラムで動作するためのスクリプトを書いています。私がやりたいことは、他のスクリプトを使用して多くのクライアントの完了を評価することです。私のスクリプトは私が望むようにほぼ正確に動作しますが、後でXMLをPHPに解析するときに問題を引き起こすXML出力にいくつかの色定数が挿入されています。簡単に言えば、カラー定数の最初の部分を削除するsed式を使用していますが、^ [(B - したがって私の問題です。
これは私が使っているsedシーケンスです:
sed -r 's/\x1B\[([0-9]{1,3}((;[0-9]{1,3})*)?)?[m|K]//g'
後続のシーケンスを削除するために実行できる別のsedシーケンスがあるかどうか疑問に思います。使ってみました。
sed 's/\^\[\\(B//'
しかし、何も削除されないようです。誰かが非常に役立つsedとカラーコードのための良いガイドを持っている場合、必ずしも答えは必要ではありません。私はそれを見ましたが、私が見つけた答えは色の先頭を削除するようです。
ご協力ありがとうございます。
答え1
ANSIエスケープコードは、ESC
または文字\033
カラーコード(そのサブセット)で始まります。\033[Xm
ここで、Xはセミコロンで区切られた数字のリストで空にすることができます(リセットを意味します)。 m は文字通りの m です。
私自身がこれらのコードを忘れ続けるので、私はそれを「記録」しました。https://github.com/seveas/hacks/blob/master/ansi.py。
sed式については、次のように選択します。s/\x1B\[[0-9;]*[JKmsu]//g
答え2
Perlで行うことができます。
#!/usr/bin/env perl
# catch the output of some command
my $output = `command`;
# remove only color codes
$output =~ s/\e\[[\d;]*m//g;
# or remove all ANSI escape sequences
# $output =~ s/\e\[?.*?[\@-~]//g
print "$output","\n";