Programa que passa STDIN para STDOUT com códigos de cores removidos?

60

Eu tenho um comando que produz saída em cores e gostaria de enviá-lo para um arquivo com os códigos de cores removidos. Existe um comando que funciona como cat , exceto que ele remove códigos de cores? Eu pretendo fazer algo assim:

$ command-that-produces-colored-output | stripcolorcodes > outfile
    
por Ryan Thompson 04.12.2010 / 00:00

7 respostas

55

Você pensaria que haveria um utilitário para isso, mas não consegui encontrá-lo. No entanto, este one-liner Perl deve fazer o truque:

perl -pe 's/\e\[?.*?[\@-~]//g'

Exemplo:

$ command-that-produces-colored-output | perl -pe 's/\e\[?.*?[\@-~]//g' > outfile

Ou, se você quiser um script, salve como stripcolorcodes :

#! /usr/bin/perl

use strict;
use warnings;

while (<>) {
  s/\e\[?.*?[\@-~]//g; # Strip ANSI escape codes
  print;
}

Se você quiser desmembrar códigos de cores somente e deixar outros códigos ANSI (como o movimento do cursor) sozinhos, use

s/\e\[[\d;]*m//g;

em vez da substituição que usei acima (que remove todos os códigos de escape ANSI).

    
por 04.12.2010 / 00:35
28

Remova os códigos de cores (caracteres especiais) com o GNU sed

sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g"

Ou

Desviar sequências de escape ANSI em Python

Instale o pacote python colorama ( pip install colorama ). Coloque em stripcolorcodes :

#!/usr/bin/env python
import colorama, fileinput, sys;
colorama.init(strip=True);

for line in fileinput.input():
    sys.stdout.write(line)

Executar chmod +x stripcolorcodes .

    
por 04.12.2010 / 08:36
20

Se você puder instalar o módulo Term :: ANSIColor , este script perl funcionará:

#!/usr/bin/env perl
use Term::ANSIColor qw(colorstrip);
print colorstrip $_ while <>;
    
por 04.12.2010 / 01:35
10

Se o seu sistema tiver acesso ao NodeJS , você poderá instalar o seguinte pacote do Node, strip-ansi-cli .

$ npm install -g strip-ansi-cli

Você pode então executar o seu comando da seguinte forma:

$ command-that-produces-colored-output | strip-ansi > outfile
    
por 16.09.2014 / 15:13
3

Este comando sed fez isso por mim:

sed -r "s/\^\[(\[[^@-~]+[@-~]|[0-9@-_]|%@)//g"

Exemplo:

$ command-that-produces-colored-output | sed -r "s/\^\[(\[[^@-~]+[@-~]|[0-9@-_]|%@)//g" > outfile
    
por 26.02.2014 / 15:51
3

Você pode usar ac para isso. Deve ser mais rápido do que qualquer outra coisa listada acima (embora perl e sed devam ser decentes). Aqui está um exemplo:

curl -s wttr.in/LA | ac -s

Como aviso: a funcionalidade de filtragem de cores foi escrita por mim.

    
por 15.11.2017 / 01:02
1
$ command-that-produces-colored-output | ansifilter

... e, se necessário, (dnf, ...) install ansifilter

    
por 07.11.2017 / 00:50