Sed - Conversion retours chariots DOS (CRLF) / UNIX (LF)

baissaoui Messages postés 498 Date d'inscription jeudi 2 septembre 2021 Statut Webmaster Dernière intervention 21 août 2024 - 21 juin 2022 à 13:17
Document initial créé par Jipicy

Conversion format de fichier DOS <> UNIX / UNIX <> DOS


Préambule

Il existe déjà des utilitaires (dos2unix et unix2dos) qui s'acquittent très bien ce cette tâche, mais rien ne vous empêche de vouloir le faire par vous même des fois que le système sur lequel vous travaillez ne possède pas ces outils et que vous soyez dans l'impossibilité de les installer.

Ce qu'il faut savoir

Les fichiers textes sous Unix (et ses descendants) terminent leur ligne par un caractère "saut de ligne", représenté par le symbole "\n" (appelé Line Feed et noté LF, code ASCII = 0A).

Les fichiers texte sous Dos (et ses descendants) terminent eux aussi leur ligne par un caractère "saut de ligne", précédé d'un caractère retour chariot, représenté par le symbole "\r" (appelé Carriage Return et noté CR, code ASCII 0D). Ainsi, chaque ligne d'un fichier DOS se termine par la séquence CRLF, soit \r\n.

Conversion DOS vers UNIX

Il suffit simplement d'effacer le caractère "\r" (retour chariot) de fin de ligne.
Le caractère "\r" (retour chariot) est représenté symboliquement par "^M", qui s'obtient par la séquence de touches suivante "CTRL-V" + "CTRL-M".
sed 's/^M$//' fichier

Note :

Avec la version GNU-sed (gsed 3.02.80 et supérieur), on peut utiliser la notation ASCII :
sed 's/\x0D$//' fichier

Conversion UNIX vers DOS

Il suffit de faire le contraire de la commande précédente, à savoir (le caractère "^M" étant saisit de la même façon (CTRL-V + CTRL-M)) :
sed 's/$/^M/' fichier

Note :

Avec la version GNU-sed (gsed 3.02.80 et supérieur), on peut utiliser la notation symbolique "\r":
sed 's/$/\r/' fichier