2012-08-29 24 views
9

Considere el siguiente comando echo:¿Cómo hacer 'gato' en Linux para interpretar los caracteres de control

echo -e "at\r" 

que produce la salida at en la línea de comandos, es decir, el carácter especial \ r se ha interpretado. Quiero hacer exactamente lo mismo con un poco de texto en un archivo. Suponiendo exactamente la misma secuencia

at\r 

se escribe en un archivo llamado at.txt, entonces quiero mostrarlo en la terminal. Pero

cat at.txt 

da la salida

at\r 

lo que no es lo que quiero. Quiero que la secuencia especial \ r sea interpretada, no solo impresa en la terminal. Alguien tiene alguna idea?

Gracias Alex

+1

Would 'echo -e "$ (cat file)"' trabajo? (Para archivos pequeños) – knittl

+2

O si el archivo es muy grande, puede intentar xargs: 'cat file | xargs echo -ne' –

+0

La primera sugerencia funciona (knittl), la segunda sugerencia (Lee) produce una cadena 'atr'. – Alex

Respuesta

1

El built-in echo comando interpreta la barra invertida común escapa. Pero en un archivo debes interpretarlo o convertirlo de manera similar. El programa sed puede hacer esto.

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

Pero aprendí algo aquí, también. El comando externo echo se comporta de forma diferente al interno.

/bin/echo "\r" 

tiene una salida diferente a

echo "\r" 

Pero básicamente lo que necesita un filtro para convertir la cadena \r Litteral a un solo byte 0x0D.

+0

Eso simplemente no es correcto ... prueba 'echo" \ r "' contra 'echo -e" \ r "'. Si fuera el shell, ambos comandos generarían la misma cadena. – knittl

+0

El eco externo se comporta de manera diferente. Y echo of sh se comporta de manera diferente que echo of bash también – knittl

10
Por qué no

:

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

puede simplemente:

echo -e $(cat at.txt) 
Cuestiones relacionadas