Menu Fermer

Supprimer les ^M dans les fichiers Linux (retour ligne)

Lorsque vous éditez un fichier texte sur Linux avec vim, nano, gedit ou tout autre éditeur, vous apercevez les caractères ^M à la fin de chaque ligne.
Que sont ces caractères ^M et surtout comment supprimer les ^M ?

Dans ce tutoriel, je vous explique comment sont arrivés ces caractères ^M en fin de ligne et surtout comment les supprimer.
Pour y parvenir, je vous donne plusieurs méthodes avec vim, sed, dos2unix et notepad++ pour corriger le retour à la ligne.

Supprimer les ^M dans les fichiers Linux (retour ligne)

Comment supprimer les ^M dans les fichiers Linux

Vim (méthode 1)

  • Ouvrez le fichier en édition avec vim
  • Puis saisissez :
:%s/^M/\r/g
  • Vérifiez que les caractères ^M en fin de ligne sont supprimés
  • Enregistrez les modifications :
:wq

Vim (méthode 2)

Dans cette seconde méthode, on passe le fichier au format Unix :

  • Ouvrez le fichier en édition
  • Puis saisissez :
:set ff=unix
  • Enfin enregistrez les modifications :
:wq

Vim (Méthode 3)

Enfin une dernière méthode avec le mode étendu de vim :

ex -bsc '%s/\r//|x' file
  • -b : mode binaire
  • % : sélectionner toutes les lignes
  • s : remplacer
  • \r : retour chariot échappé
  • x : enregistrer et quitter

Sed

sed (stream editor) est une commande linux puissante pour effectuer des opérations de texte.
Vous pouvez l’utiliser pour supprimer les ^M de cette manière :

sed 's/^M$//' fichier

Si cela est correct, alors appliquez les modifications directement au fichier avec l’option -i :

sed -i 's/^M$//' fichier

Voici une autre syntaxe pour supprimer les ^M en les remplaçant par des retours chariots UNIX :

sed -i -e "s/\r//g" fichier
  • -i : modifier le fichier directement
  • -e : expression régulière
  • \r : retour chariot échappé
  • /g : remplacement globalement

Dos2unix

dos2unix est un utilitaire dédié pour changer le mode de fichier DOS vers UNIX.

Ce n’est pas un utilitaire natif, il faut l’installer, par exemple avec APT :

sudo apt install dos2unix

Puis pour convertir le format d’un fichier :

dos2unix <fichier>
Supprimer les ^M en fin de ligne avec Dos2unix

Notepad++

Notepad++ est un éditeur de texte open source qui permet de changer très facilement le format de retour à la ligne.
Ainsi, vous pouvez très facilement supprimer les ^M.

Pour afficher les caractères de retour à la ligne dans Notepad++ : Menu Affichage > Symboles spéciaux > Afficher les symboles de fin de ligne.

Afficher les caractères de retour à la ligne sur notepad++

Pour changer le format de retour de ligne : Menu Edition > Convertir les sauts de ligne > choisissez le format Windows (CR+LR), Format Unix (LF) ou le format Mac (CR)

Convertir les formats de retour à la ligne (CRLF, LF, CR) avec Notepad++

Ici le même fichier texte avec un retour à la ligne Windows (CRLF)

Convertir les formats de retour à la ligne (CRLF, LF, CR) avec Notepad++

Ou un retour à la ligne format UNIX (LF).

Changer le format de retour à la ligne avec notepad++

Les ^M et retour à la ligne Unix et DOS

Les caractères ^M en fin de ligne apparaissent lorsque vous créez un fichier texte sur Windows et que vous transférez le fichier sur Linux par exemple avec SCP ou FTP.
Ils correspondent au retour chariot de fichier sur DOS.
En effet le retour chariot est différent dans le monde Linux et le monde Windows.

UniversCaractère retour chariotNomSystèmes d’exploitation
UNIXLF, code 10 de la table ASCII)Line Feed Linux, AIX, Xenix, Mac OS X, etc.), BeOS, AmigaOS, et RISC OS
MacCR, code 13 de la table ASCIICarriage Return
(Retour de chariot)
Apple II et Mac OS
WindowsLF + CRCP/M, MP/M, MS-DOS, OS/2 et Microsoft Windows
Les retours chariots par système d’exploitation

Les définitions :

  • CR :  Carriage Return (Retour de chariot) ;
  • LF : Line Feed
  • NL : New Line

L’option -A de la commande cat permet d’afficher les retour chariots.
Par exemple, ci-dessous, on voit le retour chariot Linux et Windows (CR) avec ^M.

Afficher les ^M et retours chariots avec la commande cat Linux
De ce fait, lorsque vous utilisez un fichier DOS/Windows sur Linux, il faut convertir les retours chariots.