Os caracteres ^[[37m
e ^[[0m
fazem parte das sequências ANSI Escape (códigos CSI) .
Veja também as especificações completas .
Usando sed
sed 's/\x1b\[[0-9;]*m//g'
-
\x1b
é o caractere especial escape (igual a\x1B
ou '\ 033') -
\[
é o segundo caractere da declaração de cores -
[0-9]*
é o valor da cor -
m
é o último caractere da declaração de cores
Exemplo com a linha de comando OP * :
perl -e 'use Term::ANSIColor; print color "white"; print "ABC\n"; print color "reset";' |
sed 's/\x1b\[[0-9;]*m//g'
Como mencionado na resposta de Tom Hale , você também pode remover outros comandos codificados. Este é um truque mais geral:
sed 's/\x1b\[[0-9;]*[a-zA-Z]//g'
- Substituir
m
por[a-zA-Z]
-
A resposta de Michał Faleński propõe-se a substituir
m
por[mGKH]
(um intervalo menor)
Usando perl
A versão de sed
instalada em alguns sistemas operacionais pode ser limitada (por exemplo, MacOS X). O comando perl
tem a vantagem de ser frequentemente mais fácil de instalar / atualizar em mais sistemas operacionais.
Escolha seu regex dependendo de quantos comandos você deseja filtrar:
perl -pe 's/\x1b\[[0-9;]*m//g' # Just the colors
perl -pe 's/\x1b\[[0-9;]*[mG]//g'
perl -pe 's/\x1b\[[0-9;]*[mGKH]//g'
perl -pe 's/\x1b\[[0-9;]*[a-zA-Z]//g'
Exemplo com a linha de comando OP * :
perl -e 'use Term::ANSIColor; print color "white"; print "ABC\n"; print color "reset";' |
perl -pe 's/\x1b\[[0-9;]*m//g'
Uso
Como apontado pelo comentário de Stuart Cardall , esse truque é usado pelo projeto Ultimate Nginx Bad Bot (quase 200 estrelas) para limpar o relatório de e-mail ;-)
* OP : O riginal P oster