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
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).
sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g"
O
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
.
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 <>;
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
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
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í.
$ command-that-produces-colored-output | ansifilter
... y si es necesario, (dnf, ...) install ansifilter