STDINをSTDOUTに渡してカラーコードを削除するプログラムはありますか?

STDINをSTDOUTに渡してカラーコードを削除するプログラムはありますか?

カラー出力を生成するコマンドがあり、それをファイルにパイプしてカラーコードを削除したいと思います。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

関連情報