Si el archivo problemático se llama datafile, aquí van tres maneras de resolver el problema:
Sabiendo que ^M es ASCII 13 decimal, pero 15 en octal:
tr -d '\015' < datafile > TEMPFILE mv -f TEMPFILE datafileTEMPFILE es un archivo temporal.
En Debian, instalando el paquete sysutils, queda instalado el comando dos2unix. Su uso es más sencillo que la solución anterior:
dos2unix datafile
En el archivo de configuración ~/.emacs, incluir el siguiente código:
;; dos2unix (borra ^M al final) (defun dos2unix() (interactive) (while (not (looking-at "^$")) (end-of-line) (delete-backward-char 1) (beginning-of-line) (next-line 1)) )La primera línea es un comentario, el resto define un nuevo comando, llamado dos2unix. Cuando se abre un archivo DOS en XEmacs, se ven los ^M al final de cada línea. Entonces uno invoca el nuevo comando por nombre:
Alt-x dos2unixy los ^M son eliminados.
Nota: Este comando no es perfecto. Por razones que no entiendo,
hay algunos tipos de archivos (no he identificado cuáles) para
los cuales los ^M son borrados sólo hasta cierto
punto. Basta dar otro Alt-x dos2unix para continuar con el
resto del archivo.
Además, se puede apreciar que el comando
simplemente recorre línea por línea, y borra el
último caráracter. Esto supone que hay un ^M
al final de todas las líneas, lo cual
a veces no es cierto para la última línea, en cuyo caso el
comando termina borrando el último carácter, que puede
ser relevante.
La moraleja es que hay que estar atento, pero me gusta
esta solución dentro del XEmacs, porque normalmente lo que
ocurre es que uno se da cuenta que están esos ^M al
abrir el archivo con el editor, y es un poco incómodo tener que
salir al shell para llamar a dos2unix, por ejemplo.
Algún día mejoraremos el comando
dos2unix() de Emacs.