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
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.
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).
less -R
zum Beispiel.cat
druckt du ?echo -e $(cat test.txt)
.Antworten:
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.
Einige Dinge, die bei mir nicht funktioniert haben, sind (anscheinend kann man keine Dinge zum Echo leiten)
oder
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.
Dies funktioniert für eine test.txt-Datei, die enthält
quelle
\a
klingelt aber für mich. Ich habe Ihren zweiten sed-Befehl geändert, aufsed 's/ /\\033\\a /g'
den nicht geklingelt wird.$(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)" \\n
oderecho -ne "$(cat <<"EOF" . . . EOF)" \\n
. Dies verhindert auch, dass bash eine Glob-Erweiterung im Text ausführt.Wenn Sie keine Farbe sehen, sind
cat
die Steuerzeichen wahrscheinlich nicht intakt.Einige Tools entfernen Steuerzeichen, lassen sie jedoch am hinteren Ende.
Vergleichen Sie:
zu
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:
würde die Farbe der Beispielzeichenfolge wiederherstellen.
quelle
Es sollte standardmäßig funktionieren. ZB wenn ich das tue
ls --color=always > /tmp/a
und dann sehecat /tmp/a
ich die Farben. Durch Überprüfen mitod
bestätigt wird, dass die Datei ANSI-Farben verwendet.Daher sollten Sie prüfen, ob Ihr Terminal ANSI-Farben unterstützt (und diese aktiviert sind).
quelle