カラー出力を生成するコマンドがあり、それをファイルにパイプしてカラーコードを削除したいと思います。cat
カラーコードを削除することを除いて、同様に機能するコマンドはありますか?私は次のことをする予定です。
$ command-that-produces-colored-output | stripcolorcodes > outfile
答え1
これを達成するためのユーティリティがあると思うかもしれませんが、見つかりません。ただし、このPerlステートメントはトリックを実行する必要があります。
perl -pe 's/\e\[?.*?[\@-~]//g'
例:
$ command-that-produces-colored-output | perl -pe 's/\e\[?.*?[\@-~]//g' > outfile
または、スクリプトが必要な場合は、次のように保存できますstripcolorcodes
。
#! /usr/bin/perl
use strict;
use warnings;
while (<>) {
s/\e\[?.*?[\@-~]//g; # Strip ANSI escape codes
print;
}
脱がしたいならただカラーコードを保存し、他のANSIコード(カーソル移動など)を維持するには、次のようにします。
s/\e\[[\d;]*m//g;
上記で使用した代替コードの代わりに(すべてのANSIエスケープコードを削除)
答え2
GNU sedを使用してカラーコード(特殊文字)を削除する
sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g"
または
PythonからANSIエスケープシーケンスを削除する
インストールするセラマPythonパッケージ(pip install colorama
)。入力stripcolorcodes
:
#!/usr/bin/env python
import colorama, fileinput, sys;
colorama.init(strip=True);
for line in fileinput.input():
sys.stdout.write(line)
ランニングchmod +x stripcolorcodes
。
答え3
インストールできる場合用語::ANSIカラーモジュールでは、次のPerlスクリプトが機能します。
#!/usr/bin/env perl
use Term::ANSIColor qw(colorstrip);
print colorstrip $_ while <>;
答え4
$ command-that-produces-colored-output | ansifilter
...必要なら、(dnf, ...) install ansifilter