web-dev-qa-db-ja.com

カラーコードを取り除いてSTDINをSTDOUTに渡すプログラム?

出力をカラーで生成するコマンドがあり、それをカラーコードを取り除いたファイルにパイプしたいと思います。カラーコードを取り除く以外はcatのように機能するコマンドはありますか?私はこのようなことをするつもりです:

$ command-that-produces-colored-output | stripcolorcodes > outfile
65

あなたはそのためのユーティリティがあると思いますが、私はそれを見つけることができませんでした。ただし、この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エスケープコードが削除されます)。

61
cjm

GNU sed でカラーコード(特殊文字)を削除する

sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g"

または

PythonでANSIエスケープシーケンスを削除する

インストール 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を実行します。

29
jfs

Term :: ANSIColor モジュールをインストールできる場合、このPerlスクリプトは機能します。

#!/usr/bin/env Perl
use Term::ANSIColor qw(colorstrip);
print colorstrip $_ while <>;
22

システムが NodeJS にアクセスできる場合、次のNodeパッケージ、 strip-ansi-cli

$ npm install -g strip-ansi-cli

その後、次のようにコマンドを実行できます。

$ command-that-produces-colored-output | strip-ansi > outfile
11
David McNamara

このsedコマンドは私のためにそれをしました:

sed -r "s/\\^\\[(\\[[^@-~]+[@-~]|[0-9@-_]|%@)//g"

例:

$ command-that-produces-colored-output | sed -r "s/\\^\\[(\\[[^@-~]+[@-~]|[0-9@-_]|%@)//g" > outfile
3
Ben

これには ac を使用できます。それは上記のどのリストよりも高速である必要があります(Perlsedはまともなはずですが)。次に例を示します。

curl -s wttr.in/LA | ac -s

免責事項として:カラーフィルタリング機能は私が作成しました。

3
user254560
$ command-that-produces-colored-output | ansifilter

...必要に応じて、(dnf, ...) install ansifilter

2
JJoao