Saltar la navegación

El problema del final de línea

El final de línea de los ficheros de texto creados en sistemas operativos UNIX se representa con un solo carácter LF (line feed, \ n, código ASCII 10), en cambio, en Windows se representa con dos caracteres CR+LF (carriage return, \ r, código ASCII 13 + line feed, \ n, código ASCII 10). Esto hace que si abrimos, por ejemplo, un fichero de texto de GNU/Linux con el bloc de notas de Windows, veremos las líneas juntas, pues se espera que las líneas estén separadas por los caracteres CR+LF y no por únicamente LF, y por lo tanto no reconoce la separación de las líneas.

Existen en Debian varios comandos que resuelven este problema convirtiendo los LF en CR+LF y a la inversa:

Comandos Paquetes
fromdos, todos tofrodos
dos2unix, unix2dos, mac2unix, unix2mac      dos2unix    
$ cat f.txt 
Linea 1
Linea 2
Linea 3
$ hd f.txt
00000000  4c 69 6e 65 61 20 31 0a  4c 69 6e 65 61 20 32 0a  |Linea 1.Linea 2.|
00000010  4c 69 6e 65 61 20 33 0a                           |Linea 3.|
00000018
$ todos f.txt
$ hd f.txt
00000000  4c 69 6e 65 61 20 31 0d  0a 4c 69 6e 65 61 20 32  |Linea 1..Linea 2|
00000010  0d 0a 4c 69 6e 65 61 20  33 0d 0a                 |..Linea 3..|
0000001b

En el ejemplo anterior, se ve cómo en un primer momento, el final de línea del fichero f.txt está formado por el carácter ASCII 0a en hexadecimal (10 en decimal), y posteriormente, tras ejecutar el comando todos, el final de línea lo componen dos caracteres, 0d+0a (13+10).

Los cuatro comandos pueden utilizarse como filtros, es decir, si no se especifican ficheros, se leerá de la entrada estándar y se escribirá sobre la salida estándar.

Licencia: licencia de software libre GPL