Los caracteres ^[[37m
y ^[[0m
son 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
( sed
no admite alternativas \e
y \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 sed
comando predeterminado no admite caracteres especiales \e
como los señalados por slm y steamer25 en los comentarios. Use en su lugar gsed
que 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 m
especí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 K
que también se debe usar además de m
eliminar los colores del gcc
error / 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 sed
instalado en algunos sistemas operativos puede ser limitada (por ejemplo, macOS). El comando perl
tiene 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 sed
línea de comando es utilizada por el proyecto Ultimate Nginx Bad Bot (1000 estrellas) para limpiar el informe del correo electrónico ;-)
more
oless -R
interpretar los códigos de escape como color en lugar de un editor de texto.