Los caracteres ^[[37my ^[[0mson parte de las secuencias de escape ANSI (códigos CSI) . Ver también estas especificaciones .
Usando GNU sed
sed 's/\x1b\[[0-9;]*m//g'
\x1b(o \x1B) es el carácter especial de escape
( sedno admite alternativas \ey \033)
\[ es el segundo personaje de la secuencia de escape
[0-9;]* son los valores de color regex
m es el último personaje de la secuencia de escape
Mac En macOS, el sedcomando predeterminado no admite caracteres especiales \ecomo los señalados por slm y steamer25 en los comentarios. Use en su lugar gsedque puede instalar usando brew install gnu-sed.
Ejemplo con la línea de comando de OP : (OP significa Cartel original)
perl -e 'use Term::ANSIColor; print color "white"; print "ABC\n"; print color "reset";' |
sed 's/\x1b\[[0-9;]*m//g'
Tom Hale sugiere eliminar todas las demás secuencias de escape utilizando en [a-zA-Z]lugar de solo la letra mespecífica de la secuencia de escape del modo de gráficos (color). Pero [a-zA-Z]puede ser demasiado ancho y podría eliminar demasiado. Michał Faleński y Miguel Mota proponen eliminar solo algunas secuencias de escape usando [mGKH]y [mGKF]respectivamente. Britton Kerin indica Kque también se debe usar además de meliminar los colores del gccerror / advertencia (no se olvide de redirigir gcc 2>&1 | sed...).
sed 's/\x1b\[[0-9;]*m//g' # Remove color sequences only
sed 's/\x1b\[[0-9;]*[a-zA-Z]//g' # Remove all escape sequences
sed 's/\x1b\[[0-9;]*[mGKH]//g' # Remove color and move sequences
sed 's/\x1b\[[0-9;]*[mGKF]//g' # Remove color and move sequences
Last escape
sequence
character Purpose
--------- -------------------------------
m Graphics Rendition Mode (including Color)
G Horizontal cursor move
K Horizontal deletion
H New cursor position
F Move cursor to previous n lines
Utilizando perl
La versión de sedinstalado en algunos sistemas operativos puede ser limitada (por ejemplo, macOS). El comando perltiene la ventaja de ser generalmente más fácil de instalar / actualizar en más sistemas operativos. Adam Katz sugiere usar \e(igual que \x1b) en PCRE .
Elija su expresión regular en función de la cantidad de comandos que desea filtrar:
perl -pe 's/\e\[[0-9;]*m//g' # Remove colors only
perl -pe 's/\e\[[0-9;]*[mG]//g'
perl -pe 's/\e\[[0-9;]*[mGKH]//g'
perl -pe 's/\e\[[0-9;]*[a-zA-Z]//g'
perl -pe 's/\e\[[0-9;]*m(?:\e\[K)?//g' # Adam Katz's trick
Ejemplo con la línea de comando de OP:
perl -e 'use Term::ANSIColor; print color "white"; print "ABC\n"; print color "reset";' \
| perl -pe 's/\e\[[0-9;]*m//g'
Uso
Como lo señaló el comentario de Stuart Cardall , esta sedlínea de comando es utilizada por el proyecto Ultimate Nginx Bad Bot (1000 estrellas) para limpiar el informe del correo electrónico ;-)
moreoless -Rinterpretar los códigos de escape como color en lugar de un editor de texto.