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 los 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).
isatty(stdin)
antes de hacerlo. ¿Te importaría compartir cuál es ese programa?cat
- la prueba rápida que ejecutégrep --color=auto myusername /etc/passwd
me da mi nombre de usuario en rojo con texto en blanco elsewhree.grep --color=auto myusername /etc/passwd | cat
me da un texto en blanco simplegrep --color=auto
evita la producción de color cuando la salida estándar no es un terminal. Estoy hablando de un comando que genera códigos de color incondicionalmente. (Como señala Alex anteriormente, dicho comportamiento es posiblemente un error, pero a veces necesitamos trabajar con un software imperfecto que no podemos solucionar fácilmente, y de eso se trata esta pregunta.)