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.

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.


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.


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
    

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

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.