Intermédiaire 8 min de lecture 25 janvier 2025

dos2unix : résoudre les problèmes de fins de ligne CRLF

Tout fonctionne localement mais le script échoue sur le serveur, votre CSV a des lignes fusionnées, un diff Git affiche des ^M. Souvent, la cause est simple : des fins de ligne Windows (CRLF) se glissent dans vos fichiers. Voici comment dos2unix vous aide à les repérer, les convertir et éviter ces écueils.

Qu'est-ce que dos2unix et les fins de ligne ?

dos2unix est un utilitaire qui convertit les fins de ligne DOS/Windows (CRLF) en fins de ligne Unix (LF) pour rendre vos fichiers cohérents entre systèmes.

Les principales variantes et caractères liés aux fins de ligne :

1 Fins de ligne classiques selon les systèmes

LF pour Unix/Linux, CRLF pour Windows, CR pour l'ancien macOS.

LF (10), CRLF (13 10), CR (13)

2 Caractères de contrôle impliqués

CR (Carriage Return) et LF (Line Feed) pilotent les retours à la ligne.

CR (13), LF (10), CRLF (13+10), NUL (0)

3 Séparateurs Unicode non-standard

Peu courants mais parfois présents dans des données mixtes :

NEL (U+0085) - Next Line
Line Separator (U+2028)
Paragraph Separator (U+2029)
Combinaisons CR seul avec LF manquant

4 Marques techniques et particularités

BOM, configuration Git/éditeur, conversions automatiques :

BOM (U+FEFF) - Byte Order Mark
.gitattributes (text, eol=lf)
EditorConfig (end_of_line = lf)
Filtrage CR en fin de ligne (^M)

Problèmes classiques

Copier-coller depuis Windows

Introduit des CRLF dans des scripts ou CSV destinés à Unix, provoquant des ^M.

Tests unitaires qui échouent

Snapshots ou comparaisons ligne à ligne diffèrent à cause de CRLF vs LF.

Scripts shell en erreur

/bin/bash^M: bad interpreter ou $'\r': command not found.

Merges et regex instables

EOL mixtes perturbent les merge-tools et ancrages regex en fin de ligne.

Exemple d'échec dû à CRLF :

# Deux chaînes visuellement identiques mais EOL différents
string1 = "email@domain.com\n"
string2 = "email@domain.com\r\n" # Fin de ligne CRLF
assert string1 == string2 # ❌ Échec

Symptômes qui doivent vous alerter

🚨 Signaux d'alarme

!
Un diff git montre des ^M en fin de ligne ou un fichier entier modifié
!
Des parsers CSV perdent des lignes ou ajoutent des retours intempestifs
!
Un .env ou un YAML refuse une clé à cause d'un CR résiduel
!
Votre éditeur affiche CRLF alors que le projet exige LF
!
Un script bash renvoie $'\r': command not found

Comment les détecter

Solution recommandée : dos2unix

dos2unix identifie et convertit rapidement les fins de ligne CRLF en LF. Il s'intègre facilement à vos scripts et pipelines pour des fichiers cohérents sur tous les environnements Unix.

✅ Détection automatique

Reconnaît DOS/Windows, Unix et ancien Mac (CR)

📊 Informations utiles

Statut des fichiers, nombre de conversions, options verbeuses

🧹 Conversion sûre

Transforme CRLF → LF sans altérer le contenu

💾 Traitement en lot

Parcours de répertoires et intégration CI/CD

Autres méthodes de détection

Affichage dans l'éditeur

Activez l’indicateur EOL (CRLF/LF) dans VS Code, JetBrains, Sublime
Forcez LF via EditorConfig et vérifiez la status-bar de l’éditeur

En ligne de commande (Unix)

# Détecter les fins de ligne DOS (CRLF)
grep -nP "\r$" fichier.txt
# Voir les fins de ligne et tabulations
sed -n l fichier.txt
# Afficher ^M et les caractères de contrôle
cat -A fichier.txt
# Inspecter les octets 0d 0a
hexdump -C fichier.txt

En code

JavaScript

str.replace(/\r\n?/g, '\n')

Python

s.replace('\r\n', '\n').replace('\r', '\n')

Excel / Google Sheets

SUBSTITUE(cellule;CAR(13);"")

Nettoyer et prévenir

🚀 Conversion rapide avec dos2unix

Avant d’écrire des scripts maison, utilisez dos2unix pour convertir immédiatement vos fichiers CRLF en LF :

Détection du format
Conversion sûre CRLF → LF
Traitement par lots

Méthodes techniques avancées

🔧 Normaliser

Imposez LF via .gitattributes (* text=auto eol=lf)
Configurez EditorConfig (end_of_line = lf)
Supprimez les BOM UTF-8 inutiles

🧹 Filtrer

Écrivez des fonctions normalize_eol() pour transformer CRLF/CR en LF
Nettoyez les CR résiduels en fin de lignes
Bloquez l’introduction de CRLF dans les chaînes d’import

⚙️ Automatiser

Hooks pre-commit qui lancent dos2unix sur les fichiers modifiés
Vérifications EOL dans le pipeline CI (grep des \r$)
Analyse sur PR avec outils de lint et règles EOL

Checklist rapide

Fichiers avec fins de ligne LF (Unix)
.gitattributes configuré (text=auto, eol=lf)
Éditeur paramétré pour enregistrer en LF et afficher CRLF
Fonction de normalisation EOL dans vos libs
Tests vérifiant l’absence de ^M en fin de ligne
Documentation équipe sur CRLF/LF et outils de conversion

Conclusion

Les fins de ligne ne se voient pas toujours, mais elles brisent des builds, des scripts et des parsers. En maîtrisant dos2unix, vous éliminez une grande source d’erreurs.

Standardisez vos EOL, contrôlez vos imports et automatisez la conversion pour réduire l’essentiel des problèmes liés aux ^M.

Convertissez CRLF en LF maintenant

Utilisez dos2unix et vos outils habituels pour uniformiser les fins de ligne et éviter les erreurs en production.

Normaliser mes fichiers