Visualizza file con colori ANSI


12

Ho un file con i colori ANSI.

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

Vorrei visualizzare il contenuto di questo file in un terminale, come catfa, ma vorrei visualizzare anche i colori.


4
Usando less -R, per esempio.
Thomas Dickey,

Cosa catstampa?
techraf,

1
La domanda di OP aveva troppe risposte possibili per essere interessante. Inizia con echo -e $(cat test.txt).
Thomas Dickey,

Risposte:


10

Stavo cercando una soluzione a questa esatta domanda bash. Ho quasi perso il commento di @Thomas Dickey che mi ha fornito la soluzione più elegante.

echo -e $(cat test.txt)

Alcune cose che non hanno funzionato per me sono (apparentemente non puoi incanalare le cose per fare eco)

cat test.txt | echo -e

o

less -R test.txt

Un altro problema che ho avuto è stato che l'eco non ha stampato correttamente nuove righe e spazi bianchi contigui all'interno del file. Per stampare quelli, ho usato il seguente.

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

Funziona con un file test.txt contenente

\e[0;31mExa         mple\e[0m
\e[0;31mExample line2\e[0m

Buona risposta, ma \asuona il campanello per me. Ho cambiato il tuo secondo comando sed a sed 's/ /\\033\\a /g'cui non suona il campanello.
falco

1
Dopo ulteriori test e la ricerca di maggiori incongruenze nei diversi programmi terminali (iTerm, Atom / nuclide), ho trovato la soluzione migliore per racchiudere $(cat file.txt)tra virgolette doppie e aggiungere una nuova riga alla fine - non c'è bisogno di sed - così: echo -ne "$(<file.txt)" \\no echo -ne "$(cat <<"EOF" . . . EOF)" \\n. Ciò impedisce anche a bash di eseguire l'espansione glob nel testo.
falco

1

Se non vedi il colore dai catcaratteri di controllo, probabilmente non sono intatti.

Alcuni strumenti rimuovono i personaggi di controllo ma ne lasciano la coda.

Confrontare:

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

per

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

Potresti essere in grado di ricostruire la sequenza di controllo da ciò che resta, anche se non è infallibile poiché la regex che usi potrebbe accidentalmente trascinare sequenze di caratteri non intenzionali, ecc. Ma per esempio:

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

ripristinerebbe il colore nella stringa di esempio.


-1

Dovrebbe funzionare di default. Ad esempio, se lo faccio ls --color=always > /tmp/ae poi cat /tmp/a, vedo i colori. Il controllo con odconferma che il file utilizza i colori ANSI.

Quindi penso che dovresti controllare se il tuo terminale supporta i colori ANSI (e sono abilitati).


1
Questo non ha risposto alla domanda.
Thomas Dickey,

1
No. less -R in realtà ha risolto il problema per me.
Ken Ingram,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.