web-dev-qa-db-fra.com

Programme qui passe STDIN à STDOUT avec des codes de couleur dépouillés?

J'ai une commande qui produit la couleur de la couleur et je voudrais le conduire dans un fichier avec les codes de couleur supprimés. Y a-t-il une commande qui fonctionne comme cat sauf qu'il enregistre les codes de couleur? Je prévois de faire quelque chose comme ça:

$ command-that-produces-colored-output | stripcolorcodes > outfile
65
Ryan C. Thompson

Vous penseriez qu'il y aurait une utilité pour cela, mais je ne pouvais pas le trouver. Cependant, ce Perl One-Liner devrait faire l'affaire:

Perl -pe 's/\e\[?.*?[\@-~]//g'

Exemple:

$ command-that-produces-colored-output | Perl -pe 's/\e\[?.*?[\@-~]//g' > outfile

Ou, si vous voulez un script, vous pouvez enregistrer sous stripcolorcodes:

#! /usr/bin/Perl

use strict;
use warnings;

while (<>) {
  s/\e\[?.*?[\@-~]//g; # Strip ANSI escape codes
  print;
}

Si vous voulez dépouiller uniquement Codes de couleur et laissez tout autre code ANSI (comme le mouvement du curseur) seul, utilisez

s/\e\[[\d;]*m//g;

au lieu de la substitution, j'ai utilisé ci-dessus (qui supprime tous les codes d'échappement ANSI).

61
cjm

Retirez les codes de couleur (caractères spéciaux) avec GNU SED

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

Ou

Strip ansi Séquences d'échappement en Python

Installation colorama python paquet (pip install colorama). Mettre dans stripcolorcodes:

#!/usr/bin/env python
import colorama, fileinput, sys;
colorama.init(strip=True);

for line in fileinput.input():
    sys.stdout.write(line)

Run chmod +x stripcolorcodes.

29
jfs

Si vous pouvez installer le module TERM: ANSICOLOR , ce script Perl fonctionne:

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

Si votre système a accès à NodeJS Vous pouvez installer le fichier suivant Node package, strip-ansi-cli .

$ npm install -g strip-ansi-cli

Vous pouvez ensuite exécuter votre commande comme si:

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

Cette commande sed a fait pour moi:

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

Exemple:

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

Vous pouvez utiliser AC pour cela. Il devrait être plus rapide que tout ce qui est indiqué ci-dessus (bien que Perl et sed devrait être décent). Voici un exemple:

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

En tant que non-responsabilité: la fonctionnalité de filtrage de la couleur a été écrite par moi.

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

... et si nécessaire, (dnf, ...) install ansifilter

2
JJoao