2012-08-29 8 views
9

Si consideri il seguente comando echo:Come fare 'gatto' in Linux per interpretare i caratteri di controllo

echo -e "at\r" 

che produce l'uscita at sulla riga di comando, vale a dire il carattere speciale \ r è stato interpretato. Voglio fare esattamente la stessa cosa con del testo in un file. Supponendo la stessa identica sequenza di

at\r 

viene scritto in un file denominato at.txt, allora voglio visualizzarlo sul terminale. Ma

cat at.txt 

dà l'uscita

at\r 

ciò che non è quello che voglio. Voglio che la sequenza speciale \ r sia interpretata, non solo stampata sul terminale. Qualche idea?

Grazie Alex

+1

Sarebbe 'echo -e "$ (cat file)"' lavoro? (Per file di piccole dimensioni) – knittl

+2

Oppure, se il file è molto grande, è possibile provare xargs: 'cat file | xargs echo -ne' –

+0

Il primo suggerimento funziona (knittl), il secondo suggerimento (Lee) produce una stringa 'atr'. – Alex

risposta

1

Il built-in echo comando interpreta il backslash comuni sfugge. Ma in un file devi interpretarlo o convertirlo in un modo simile. Il programma sed può farlo.

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

Ma ho imparato anche qui. Il comando esterno echo si comporta diversamente da quello interno.

/bin/echo "\r" 

Ha output diverso rispetto

echo "\r" 

Ma in fondo è necessario un filtro per convertire la stringa di \r letterale ad un singolo byte 0x0D.

+0

Questo semplicemente non è corretto ... prova 'echo" \ r "' vs. 'echo -e" \ r "'. Se era la shell, entrambi i comandi avrebbero prodotto la stessa stringa. – knittl

+0

L'eco esterno si comporta in modo diverso. E l'eco di sh si comporta in modo diverso rispetto all'eco di bash – knittl

10

Perché non:

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

Si può semplicemente:

echo -e $(cat at.txt) 
Problemi correlati