Exibe o arquivo com cores ANSI

7

Eu tenho um arquivo com cores ANSI.

test.txt: \e[0;31mExample\e[0m

Gostaria de exibir o conteúdo deste arquivo em um terminal, como cat , mas gostaria de exibir as cores também.

    
por bob dylan 14.02.2016 / 12:32

3 respostas

5

Eu estava procurando uma solução para essa pergunta básica. Quase perdi o comentário do @Thomas Dickey que me proporcionou a solução mais elegante.

echo -e $(cat test.txt)

Algumas coisas que não funcionaram para mim são (aparentemente você não pode mandar coisas para ecoar)

cat test.txt | echo -e

ou

less -R test.txt

Outro problema que tive foi que echo e não imprimiu novas linhas e espaços em branco contíguos dentro do arquivo bem. Para imprimi-los, usei o seguinte.

echo -ne $(cat test.txt | sed  's/$/\n/' | sed 's/ /\a /g')

Isso funciona para um arquivo test.txt contendo

\e[0;31mExa         mple\e[0m
\e[0;31mExample line2\e[0m
    
por 28.08.2017 / 07:17
1

Se você não estiver vendo cores de cat , os caracteres de controle provavelmente não estão intactos.

Algumas ferramentas eliminam os caracteres de controle, mas deixam o final.

Compare:

 echo -e "\e[0;31mExample\e[0m foo"

para

 echo -e "[0;31mExample[0m foo" 

Você pode reconstruir a sequência de controle a partir do que resta, embora não seja à prova de erros, pois o regex que você usa pode acidentalmente inserir seqüências de caracteres não intencionais etc. Mas, por exemplo:

echo -e "[0;31mExample[0m foo" | sed "s:\[\([0-9]*[;m]\):^[[:g"

restauraria a cor da string de exemplo.

    
por 03.04.2017 / 20:56
-1

Deve funcionar por padrão. Por exemplo. se eu fizer ls --color=always > /tmp/a e cat /tmp/a , eu vejo as cores. A verificação com od confirma que o arquivo usa cores ANSI.

Portanto, acho que você deve verificar se o seu terminal suporta cores ANSI (e elas estão ativadas).

    
por 14.02.2016 / 12:49

Tags