出力をカラーで生成するコマンドがあり、それをカラーコードを取り除いたファイルにパイプしたいと思います。カラーコードを取り除く以外はcat
のように機能するコマンドはありますか?私はこのようなことをするつもりです:
$ command-that-produces-colored-output | stripcolorcodes > outfile
あなたはそのためのユーティリティがあると思いますが、私はそれを見つけることができませんでした。ただし、このPerlの1行でうまくいくはずです。
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;
}
onlyカラーコードを削除し、他のANSIコード(カーソルの移動など)をそのままにする場合は、
s/\e\[[\d;]*m//g;
上記で使用した置換の代わりに(すべてのANSIエスケープコードが削除されます)。
sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g"
または
インストール colorama 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
を実行します。
Term :: ANSIColor モジュールをインストールできる場合、このPerlスクリプトは機能します。
#!/usr/bin/env Perl
use Term::ANSIColor qw(colorstrip);
print colorstrip $_ while <>;
システムが NodeJS にアクセスできる場合、次のNodeパッケージ、 strip-ansi-cli
。
$ npm install -g strip-ansi-cli
その後、次のようにコマンドを実行できます。
$ command-that-produces-colored-output | strip-ansi > outfile
このsedコマンドは私のためにそれをしました:
sed -r "s/\\^\\[(\\[[^@-~]+[@-~]|[0-9@-_]|%@)//g"
例:
$ command-that-produces-colored-output | sed -r "s/\\^\\[(\\[[^@-~]+[@-~]|[0-9@-_]|%@)//g" > outfile
これには ac を使用できます。それは上記のどのリストよりも高速である必要があります(Perl
とsed
はまともなはずですが)。次に例を示します。
curl -s wttr.in/LA | ac -s
免責事項として:カラーフィルタリング機能は私が作成しました。
$ command-that-produces-colored-output | ansifilter
...必要に応じて、(dnf, ...) install ansifilter