Par Jonesy.
Je vous propose deux méthodes afin de supprimer ces sales bêtes.
Avant tout, sachez que le ^M que vous voyez dans votre fichier texte est la manifestation du retour à la ligne des fichiers sur un système Microsoft Windows.
Mais comment voir les caractères invisibles ? Je les vois.
Sur les Unix-like (Linux, *BSD, Mac OS X, …) le retour à la ligne est le code ascii 10 (0A en hexadécimal), qui signifie “Line Feed” ou “retour ligne” alors que sous un système de Microsoft, le retour à la ligne est l'ensemble des deux codes ascii dans l'ordre : 13 et 10 (0D et 0A en hexadécimal) qui signifie Carriage Return (retour chariot) et Line Feed (saut de ligne).
Donc pour supprimer ces fameux ^M, c'est à dire le code ascii 13 de trop, faîtes comme suit :
Ouvrer votre fichier avec vi (ou vim, …). Une fois le fichier ouvert, tapez :
:%s/<Ctrl-v><entrée>//g
Pour rendre cette manipulation plutôt ingrate automatique, faîtes-en une macro sous vim/gVim ! Editer votre fichier ~/.vimrc et ajoutez-y la ligne suivante :
map v :%s/<Ctrl-v><Ctrl-v><Ctrl-v><Ctrl-v><Ctrl-v><entrée>//g
Ensuite, lorsque vous ouvrirez un fichier avec des ^M, il vous suffira de taper v et entrée.
$ cat <votre_fichier> | tr -d ' ' ><votre_fichier>.tmp && mv <votre_fichier>.tmp <votre_fichier>
Ces solutions ont l'avantage de fonctionner sur tous les systèmes Unix-like.
(x)Emacs, ou encore Vim. Ou un éditeur hexadécimal (bpe).