Conversion des fins de lignes entre Unix et Windows

C'est la méthode la plus simple que j'aie trouvée. Elle nécessite seulement de disposer d'un awk autorisant l'emploi d'expressions rationnelles comme séparateur d'enregistrements (RS), ce qui devrait être le cas de tous les awk modernes. De plus, elle marche sur des fichiers comportant à la fois des fins de lignes Unix et DOS, sans ajouter de lignes blanches parasites.

Ce sont des commandes qui m'ont été très utiles sous Cygwin comme sous Linux.

Convertir des fins de lignes Unix (LF) en fins de lignes DOS (CR-LF)

Utiliser la commande awk suivante :

gawk -v RS='(\r\n|\n)' -v ORS='\r\n' '{ print }'

Par exemple :

gawk -v RS='(\r\n|\n)' -v ORS='\r\n' '{ print }' fichier.unix.txt > fichier.dos.txt

Pour vérifier le résultat (en remplaçant u8 par le code du codage utilisé si vous n'êtes pas en UTF-81) :

# Sans conversion
echo -e 'essai\nessai\r\nessai' | recode u8..dump-with-names

# Avec conversion
echo -e 'essai\nessai\r\nessai' | gawk -v RS='(\r\n|\n)' -v ORS='\r\n' '{ print }' \
  | recode u8..dump-with-names

Convertir des fins de lignes DOS (CR-LF) en fins de lignes Unix (LF)

Utiliser la commande awk suivante :

gawk -v RS='(\r\n|\n)' -v ORS='\n' '{ print }'

Par exemple :

gawk -v RS='(\r\n|\n)' -v ORS='\n' '{ print }' fichier.dos.txt > fichier.unix.txt

Pour vérifier le résultat (en remplaçant u8 par le code du codage utilisé si vous n'êtes pas en UTF-8) :

# Sans conversion
echo -e 'essai\nessai\r\nessai' | recode u8..dump-with-names

# Avec conversion
echo -e 'essai\nessai\r\nessai' | gawk -v RS='(\r\n|\n)' -v ORS='\n' '{ print }' \
  | recode u8..dump-with-names


  1. Par exemple l1 pour Latin 1 (ISO-8859-1) et l9 pour Latin 9 (ISO-8859-15), lancez recode -l pour obtenir la liste complète des codages. (1)

Conversion des fins de lignes entre Unix et Windows (last edited 2008-06-01 10:29:35 by JeanPhilippeGuérard)