Datei mit ANSI-Farben anzeigen

11

Ich habe eine Datei mit ANSI-Farben.

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

Ich möchte den Inhalt dieser Datei wie in einem Terminal catanzeigen, aber ich möchte auch die Farben anzeigen.

Bob Dylan
quelle
4
Verwenden Sie less -Rzum Beispiel.
Thomas Dickey
Was catdruckt du ?
Techraf
1
Die Frage von OP hatte zu viele mögliche Antworten, um interessant zu sein. Beginnen Sie mit echo -e $(cat test.txt).
Thomas Dickey

Antworten:

9

Ich suchte nach einer Lösung für genau diese Bash-Frage. Ich habe fast den Kommentar von @Thomas Dickey verpasst, der mir die eleganteste Lösung lieferte.

echo -e $(cat test.txt)

Einige Dinge, die bei mir nicht funktioniert haben, sind (anscheinend kann man keine Dinge zum Echo leiten)

cat test.txt | echo -e

oder

less -R test.txt

Ein weiteres Problem, das ich hatte, war, dass echo -e keine Zeilenumbrüche und zusammenhängenden Leerzeichen in der Datei druckte. Um diese zu drucken, habe ich Folgendes verwendet.

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

Dies funktioniert für eine test.txt-Datei, die enthält

\e[0;31mExa         mple\e[0m
\e[0;31mExample line2\e[0m
Angst
quelle
Gute Antwort, \aklingelt aber für mich. Ich habe Ihren zweiten sed-Befehl geändert, auf sed 's/ /\\033\\a /g'den nicht geklingelt wird.
Falke
1
Nach weiteren Tests und dem Finden weiterer Inkonsistenzen in verschiedenen Terminalprogrammen (iTerm, Atom / Nuklid) habe ich festgestellt, dass es am besten ist, nur $(cat file.txt)doppelte Anführungszeichen einzugeben und am Ende eine neue Zeile hinzuzufügen - keine Notwendigkeit für sed - also: echo -ne "$(<file.txt)" \\noder echo -ne "$(cat <<"EOF" . . . EOF)" \\n. Dies verhindert auch, dass bash eine Glob-Erweiterung im Text ausführt.
Falke
1

Wenn Sie keine Farbe sehen, sind catdie Steuerzeichen wahrscheinlich nicht intakt.

Einige Tools entfernen Steuerzeichen, lassen sie jedoch am hinteren Ende.

Vergleichen Sie:

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

zu

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

Möglicherweise können Sie die Steuerungssequenz aus den verbleibenden Elementen neu erstellen, obwohl dies nicht narrensicher ist, da der von Ihnen verwendete reguläre Ausdruck möglicherweise versehentlich unbeabsichtigte Zeichenfolgen usw. abruft. Aber zum Beispiel:

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

würde die Farbe der Beispielzeichenfolge wiederherstellen.

Catskul
quelle
-1

Es sollte standardmäßig funktionieren. ZB wenn ich das tue ls --color=always > /tmp/aund dann sehe cat /tmp/aich die Farben. Durch Überprüfen mit odbestätigt wird, dass die Datei ANSI-Farben verwendet.

Daher sollten Sie prüfen, ob Ihr Terminal ANSI-Farben unterstützt (und diese aktiviert sind).

Giacomo Catenazzi
quelle
1
Dies beantwortete die Frage nicht.
Thomas Dickey
1
Nr. Weniger -R hat das Problem tatsächlich für mich gelöst.
Ken Ingram