Problema del "retorno de carro de fin de línea" en ficheros de diccionarios en texto plano para generar ficheros de hashes con genpmk para Cowpatty- Que carajo es el Retorno de carro de fín de línea?Cuando creas un documento de texto en MSDOS/Windows (como p.e. en Notepad o un programa de generación de diccionarios), Windows añade al final de cada línea un retorno de carro CR (carriage return) y un salto de línea LF (line feed). En cambio, en Linux/Unix, el formato de un documento de texto es solo un LF al final de cada línea. un ejemplo claro:
El típico error que resulta al crear un shell script (bash) o rutina en C en texto bajo windows, si tratas de ejecutarlo en entorno Linux/Unix te dice lo siguiente:
bash: ./programa.txt: /bin/bash^M: bad interpreter: No existe el fichero o el directorio
(Que no me ha pasado veces a mi y era esto...
)
Pues resulta que a la hora de precom****r un diccionario en texto plano en formato windows con el genpmk, el programa te cojera en cada liena la palabra junto con el retorno de carro; en vez de CASA te cojerá CASA[CR]
- Como evitarlo antes de crearlo / como modificarlo?Lo mejor... crear el fichero de texto bajo linux,.. no falla!
Modificarlo bajo linux:
Tambien, en caso de estar ya en un entorno Linux con un fichero de texto en formato Dos/Windows, se puede recurrir a "una operación de limpieza"; La sencilla: con el comando "
dos2unix"; si no disponemos de el, pues con el
editor Vi.
Con el
dos2unix tan simple como:
dos2unix fichero.txt
Y ya està, el fichero convertido. facil, no?
Si no disponemos del comando, pues se edita el fichero con Vi:
Vi fichero.txt
Nos vamos a la última linea:
^G
con lo que saldra ":" en la línea de comando, y le decimos que desde la primera línea hasta la última ($) sustituye
s ^M por nada. Sería así:
:1,$ s/{ctrl-V}{ctrl-M}// (esto es, presionar ctrl-v y ctrl-m)
(en pantalla se verá esto:)
:1,$ s/^M//
y guardamos y salimos con
xVale, en caso de que utilicemos Windows?Facil, no utilizar el notepad, word, .... En cambio, se puede utilizar el programa
Notepad++. Si no lo conoceis, es gratuito y le da mil vueltas al notepad.
En el caso de un fichero nuevo, simplemente antes de guardarlo, os vais a "
Format" y seleccionais "
Convert to UNIX format" en lugar del que es por defecto (Dos/Windows). si os fijais en el lateral derecho inferior de la ventana, donde antes salia
Dos/Windows ahora os pondra
UNIX. De esta manera no habrà los retornos de carro.
En el caso de un fichero existente o como p.e. el creado por un programa windows de generacion de diccionarios, pues procedemos de igual manera; abrimos el fichero con el Notepad++ y seleccionamos
Format/Convert to UNIX format. Y ya esta, eliminados los dichosos retornos de carro del fichero.
Notas:
eliminar el retorno de carro no es un plisplas... se puede tirar rato (por no decir una hora o mas) como tengas un fichero enorme...
Eliminar el retorno de carro no estropea el fichero de texto para ser utilizado en texto plano.
Y ahora ya podemos crear el fichero de hashes con genpmk.