it-swarm-es.tech

¿Programa que pasa STDIN a STDOUT con códigos de color eliminados?

Tengo un comando que produce resultados en color, y me gustaría canalizarlo a un archivo con los códigos de color eliminados. ¿Hay algún comando que funcione como cat excepto que elimina los códigos de color? Planeo hacer algo como esto:

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

Uno pensaría que habría una utilidad para eso, pero no pude encontrarlo. Sin embargo, este Perl one-liner debería hacer el truco:

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

Ejemplo:

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

O, si desea un script, puede guardarlo como stripcolorcodes:

#! /usr/bin/Perl

use strict;
use warnings;

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

Si desea eliminar solo códigos de color y dejar solos cualquier otro código ANSI (como el movimiento del cursor), use

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

en lugar de la sustitución que utilicé anteriormente (que elimina todos los códigos de escape ANSI).

61
cjm

Eliminar códigos de color (caracteres especiales) con GNU sed

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

O

Tira secuencias de escape ANSI en Python

Instalar colorama python paquete (pip install colorama). Poner en stripcolorcodes:

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

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

Correr chmod +x stripcolorcodes.

29
jfs

Si puede instalar el módulo Término :: ANSIColor , este script de Perl funciona:

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

Si su sistema tiene acceso a NodeJS , puede instalar el siguiente Node paquete, strip-ansi-cli .

$ npm install -g strip-ansi-cli

Luego puede ejecutar su comando de la siguiente manera:

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

Este comando sed lo hizo por mí:

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

Ejemplo:

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

Puede usar ac para esto. Debería ser más rápido que todo lo mencionado anteriormente (aunque Perl y sed deberían ser decentes). Aquí hay un ejemplo:

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

Como descargo de responsabilidad: la funcionalidad de filtrado de color fue escrita por mí.

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

... y si es necesario, (dnf, ...) install ansifilter

2
JJoao