Convertir CRLF aux flux de ligne sur Linux

Quelle est la meilleure façon de convertir les flux CRLF en ligne dans les fichiers sous Linux?

J'ai vu des commandes sed , mais y a-t-il quelque chose de plus simple?

Utilisez cette commande:

fromdos yourtextfile 

En revanche:

 todos yourtextfile 

Ces commandes se trouvent dans le package tofrodos (sur les distributions les plus récentes), qui fournit également les deux wrappers unix2dos et dos2unix qui imitent les anciens outils Unix du même nom.

Utilisez dos2unix .

Dos2unix – Convertisseur de format de fichier texte DOS / MAC to UNIX

 dos2unix [options] [-c convmode] [-o file ...] [-n infile outfile ...] Options: [-hkqV] [--help] [--keepdate] [--quiet] [--version] 

Je préfère Perl :

 perl -lne 's/\r//g; print' winfile.txt > unixfile.txt 

Mais c'est bien adapté à mes utilisations, et il est très facile de me souvenir. Tous les systèmes ne comportent pas une commande dos2unix, mais la plupart d'entre eux ont un interpréteur perl.

Un autre est recode , un remplacement puissant pour dos2unix et iconv; Il est disponible dans le package "recode" dans les dépôts Debian:

 recode ibmpc..lat1 winfile.txt # dos2unix recode lat1..ibmpc unixfile.txt # unix2dos 

Pour les fans de awk :

 awk '{ sub("\r$", ""); print }' winfile.txt > unixfile.txt 

… et sed :

 sed 's/\r$//' winfile.txt > unixfile.txt 

Et maintenant, seulement un peu moins compliqué que de supprimer les CR à la main dans un éditeur hexadécimal, directement de l' un de nos amis de stackoverflow.com , utilisables avec l'interprète de boeuf (situé dans votre dépôt de Debian de quartier amical),

Dos2unix dans brainfuck !

 ,[[->+>+<<]>>>,[<-------------[+++++++++++++.>>>]<[>>----------[>+++++++++++++.-------------]<++++++++++>]<<<<[-]>>>[-<<<+>>>]]<[-]<[-]<]++++++++++. 

Merci beaucoup à jk de perdre une heure de sa vie pour écrire ceci!

Je fais ceci sur Bash :

 cat cr_stuffed.file | tr -d \r > no_more_crs.file 

Je pense que vous pouvez également utiliser tr , bien que je n'ai pas de fichiers de format drôle sur lesquels essayer):

 tr -d '\r' < file1 > file2 

J'ai trouvé un moyen très simple … Ouvrir le fichier avec nano: ## nano file.txt

Appuyez sur Ctrl + O pour enregistrer, mais avant d'appuyer sur Entrée, appuyez sur: Alt + D pour basculer entre les terminaisons de ligne DOS et Unix / Linux ou: Alt + M pour basculer entre les terminaisons de ligne Mac et Unix / Linux, puis appuyez sur Entrée pour sauvegarder et Ctrl + X pour quitter.

En vi ou Vim :

 :%s/^V^M//g 

Je préfère Vim et :set fileformat=unix . Bien qu'il ne soit pas le plus rapide, il me donne un aperçu. Il est particulièrement utile dans le cas d'un fichier à terminaisons mixtes.

Si vous voulez une méthode GUI, essayez l'éditeur de texte Kate (d'autres éditeurs de texte avancés peuvent également gérer cela). Ouvrez la boîte de dialogue Rechercher / Remplacer ( Ctrl + R ) et remplacez \r\n par \n . (NB: vous devrez choisir "Expression régulière" dans la liste déroulante et désélectionner "Sélection uniquement" parmi les options.)

EDIT: Ou, si vous voulez simplement convertir au format Unix, utilisez l'option de menu Tools > End of Line > Unix .

Collez ceci dans deux2unix.py script Python.

 #!/usr/bin/env python """\ convert dos linefeeds (crlf) to unix (lf) usage: dos2unix.py <input> <output> """ import sys if len(sys.argv[1:]) != 2: sys.exit(__doc__) content = '' outsize = 0 with open(sys.argv[1], 'rb') as infile: content = infile.read() with open(sys.argv[2], 'wb') as output: for line in content.splitlines(): outsize += len(line) + 1 output.write(line + '\n') print("Done. Saved %s bytes." % (len(content)-outsize)) 

Devrait fonctionner sur n'importe quelle plate-forme avec Python installé. Domaine public.