Comment convertir les sauts de ligne dans un fichier texte entre les formats Windows et Unix / Linux?

33

Comment convertir des sauts de ligne dans un fichier texte entre les formats Windows et Unix / Linux?

J'ai un environnement * nix, mais il me faut importer et exporter des données avec des sauts de ligne de style Windows. Je pensais qu'il y aurait un utilitaire standard ou une commande pour le faire, mais je n'arrive pas à le trouver.

alexeit
la source

Réponses:

42

Vous êtes à la recherche probablement dos2unix, unix2dos, todosou en fromdosfonction de votre distribution. Ubuntu / paquet Debian todos/ fromdosfaisant partie du paquet tofrodos à partir de la mémoire.

Saschabeaumont
la source
4
Au cas où quelqu'un trouverait une solution à cette question à la recherche de solutions Windows, le site Web en amont dos2unixest waterlan.home.xs4all.nl/dos2unix.html et fonctionne également sous Windows.
Womble
Vous pouvez installer dos2unix/unix2dos sur Mac OS X avec Homebrew . Avec Homebrew installé, la commande est brew install dos2unix, qui utilise cette formule .
Rory O'Kane
24

Une option consiste à utiliser unix2dos(et dos2unixà revenir en arrière) sur la ligne de commande.

Une autre consiste à utiliser un éditeur de texte:
Pour vi:: set ff = dos pour définir les fins de ligne comme étant des fins de ligne.
Pour emacs: Cx [ENTER] f dos [ENTER]

Pour votre éditeur basé sur une interface graphique préférée (par exemple, jedit), je vous recommande de consulter le manuel ou Google.

Enfin, si vous ne souhaitez pas utiliser d’éditeur de texte, utilisez simplement des utilitaires plus courants, par exemple (ou n’avez pas installé unix2dos):

tr -d '\r' < infile > outfilepour aller de Windows -> Unix
awk 'sub("$", "\r")' unixfile.txt > winfile.txtpour aller de Unix -> Windows car trne peut pas aller de Unix à Windows.

Chealion
la source
dos2unix a fait l'affaire, mais merci pour votre utilité, cela aurait pu vous faire gagner beaucoup de temps dans le passé!
alexeit
Si un fichier a des fins de ligne mixte, assurez - vous de le charger dans bon ff: :e ++ff=unix. Au moins, cela a du sens pour la dos -> unixconversion.
x-yuri
Ce paquebot enseigne à un homme à pêcher, merci pour cela. J'aurai un peu moins faim à l'avenir
Gareth Davidson
13

Modifiez-le dans Vim et utilisez la set fileformatcommande.

  • MS-DOS / Windows (coupures CR + LF) à * nix (coupures LF seulement)

    :set fileformat=unix
    :wq
    
  • * nix à MS-DOS / Windows

    :set fileformat=dos
    :wq
    
nedm
la source
Soyez prudent lorsque vous utilisez cette option si le fichier ne comporte pas déjà de saut de ligne à la dernière ligne. vim en ajoutera un à moins que vous ne sachiez le lui dire.
CesarB
Après des heures à essayer toutes les autres solutions, c’était la bouée de sauvetage dont j'avais besoin. Confirmation du comportement sur OS X Yosemite avec hexdump -C- a également confirmé que ce n'est pas collant - elle est définie par visession
Techmag
8

C’est ce que j’utilise, comme Chealion, pour convertir les fins de ligne Windows en Unix:

tr -d \\015 < windows > unix
Josh
la source
L'affiche voulait unix aux fins de lignes Windows. Et vous avez quelques années de retard avec votre réponse.
ott--
5
Qui se soucie si c'est "années en retard"? Cela fonctionne toujours et reste applicable à la question. J'ajoutais juste une autre option pour les lecteurs qui viennent sur elle, comme moi. En outre, sa question demande Windows -> Unix et sa description demande Unix -> Windows. haussement d'épaules
Josh
Droite. Peut-être ajoutez-vous alors l’autre commande tr pour convertir unix en windows.
ott--
J'ai essayé d'annuler le vote négatif, mais il est dit que c'est verrouillé jusqu'à ce que l'article soit édité.
ott--
@ ott-- pas de problème, j'ai voté pour vous. ... attends, maintenant je ne peux plus voter pour moi! ... dang ... :)
Alois Mahdal
1

Faire cela avec POSIX est délicat:

  • POSIX Sed ne prend pas en charge \rou \15. Même si c'était le cas, l'option en place -in'est pas POSIX

  • POSIX Awk prend en charge \ret \15, toutefois, l' -i inplaceoption n'est pas POSIX

  • d2u et dos2unix ne sont pas des utilitaires POSIX , mais ex est

  • Ex Posix ne supporte pas \r, \15, \nou\12

Pour supprimer les retours chariot:

awk 'BEGIN{RS="\1";ORS="";getline;gsub("\r","");print>ARGV[1]}' file

Pour ajouter des retours chariot:

awk 'BEGIN{RS="\1";ORS="";getline;gsub("\n","\r&");print>ARGV[1]}' file
Steven Penny
la source