2012-08-29 9 views
9

den folgenden Befehl echo Bedenken Sie:Wie ‚Katze‘ in Linux machen Steuerzeichen zu interpretieren

echo -e "at\r" 

, die den Ausgang at auf der Kommandozeile erzeugt hat, das heißt, die \ r Sonderzeichen interpretiert. Ich möchte genau dasselbe mit etwas Text in einer Datei machen. genau die gleiche Sequenz Gesetzt wird

at\r 

in eine Datei at.txt, dann genannt geschrieben ich es auf dem Endgerät angezeigt werden soll. Aber

cat at.txt 

gibt dem Ausgang

at\r 

was nicht das, was ich will. Ich möchte, dass die spezielle Sequenz interpretiert wird und nicht nur auf dem Terminal gedruckt wird. Irgendjemand eine Idee?

Dank Alex

+1

Würde 'echo -e "$ (cat-Datei)"' Arbeit? (Für kleine Dateien) – knittl

+2

Oder, wenn die Datei sehr groß ist, könnten Sie versuchen, xargs: 'cat file | xargs echo -ne' –

+0

Der erste Vorschlag funktioniert (knittl), der zweite Vorschlag (Lee) erzeugt eine Zeichenfolge 'atr'. – Alex

Antwort

1

Der eingebaute in echo Befehl entkommt der gemeinsamen Backslash interpretiert. Aber in einer Datei muss man sie interpretieren oder ähnlich umwandeln. Das sed Programm kann dies tun.

sed -e 's/\\r/\r/' < at.txt 

Aber ich lernte sowas hier auch. Der externe echo-Befehl verhält sich anders als der interne.

/bin/echo "\r" 

hat andere Leistung als

echo "\r" 

Aber im Grunde benötigen Sie einen Filter, um die Litteral \r Zeichenfolge auf ein Byte 0x0D zu konvertieren.

+0

Das ist einfach nicht korrekt ... versuche 'echo" \ r "' gegen 'echo -e" \ r "'. Wenn es die Shell wäre, würden beide Befehle die gleiche Zeichenfolge ausgeben. – knittl

+0

Das externe Echo verhält sich anders. Und Echo von Sh verhält sich anders als Echo von Bash auch – knittl

10

Warum nicht:

while read -r line; do echo -e $line; done < at.txt 
3

Sie können einfach:

echo -e $(cat at.txt)