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\x1Bou '\ 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
mpor[a-zA-Z] -
A resposta de Michał Faleński propõe-se a substituir
mpor[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