Os caracteres ^[[37me ^[[0mfazem parte das seqüências de escape ANSI (códigos CSI) . Veja também estas especificações .
Usando GNU sed
sed 's/\x1b\[[0-9;]*m//g'
\x1b(ou \x1B) é o caractere especial de escape
( sednão suporta alternativas \ee \033)
\[ é o segundo caractere da sequência de escape
[0-9;]* é o (s) valor (es) de cor regex
m é o último caractere da sequência de escape
Mac No macOS, o sedcomando padrão não suporta caracteres especiais, como \eindicado por slm e steamer25 nos comentários. Em vez disso, use gsedque você pode instalar usando brew install gnu-sed.
Exemplo com a linha de comando do OP: (OP significa Pôster original)
perl -e 'use Term::ANSIColor; print color "white"; print "ABC\n"; print color "reset";' |
sed 's/\x1b\[[0-9;]*m//g'
Tom Hale sugere remover todas as outras seqüências de escape usando em [a-zA-Z]vez da letra mespecífica da seqüência de escape do modo de gráfico (cor). Mas [a-zA-Z]pode ser muito largo e pode remover muito. Michał Faleński e Miguel Mota propõem remover apenas algumas seqüências de escape usando [mGKH]e [mGKF]respectivamente. Britton Kerin indica Kque também deve ser usado além de mremover as cores de gccerro / aviso (não se esqueça de redirecionar 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
Usando perl
A versão do sedinstalada em alguns sistemas operacionais pode ser limitada (por exemplo, macOS). O comando perltem a vantagem de ser geralmente mais fácil de instalar / atualizar em mais sistemas operacionais. Adam Katz sugere usar \e(o mesmo que \x1b) no PCRE .
Escolha seu regex dependendo de quantos comandos você deseja 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
Exemplo com a linha de comando do OP:
perl -e 'use Term::ANSIColor; print color "white"; print "ABC\n"; print color "reset";' \
| perl -pe 's/\e\[[0-9;]*m//g'
Uso
Conforme apontado pelo comentário de Stuart Cardall , essa sedlinha de comando é usada pelo projeto Ultimate Nginx Bad Bot (1000 estrelas) para limpar o relatório de email ;-)
moreouless -Rinterpretar os códigos de escape como cores em vez de como um editor de texto.