Wie konvertiere ich Zeilenumbrüche in einer Textdatei zwischen den Formaten Windows und Unix / Linux?

33

Wie konvertiere ich Zeilenumbrüche in einer Textdatei zwischen den Formaten Windows und Unix / Linux?

Ich habe eine * nix-Umgebung, muss aber Daten mit Windows-Zeilenumbrüchen importieren und exportieren. Ich dachte, es gäbe ein Standarddienstprogramm oder einen Standardbefehl, aber ich kann ihn nicht finden.

alexeit
quelle

Antworten:

42

Sie suchen wahrscheinlich dos2unix, unix2dos, todosoder fromdosje nach Distribution. Ubuntu / Debian-Paket todos/ fromdosals Teil des Tofrodos- Pakets aus dem Speicher.

saschabeaumont
quelle
4
Falls jemand auf diese Frage stößt und nach Windows-Lösungen sucht, dos2unixlautet die Upstream-Site für waterlan.home.xs4all.nl/dos2unix.html und funktioniert auch unter Windows.
womble
Sie können dos2unix/unix2dos unter Mac OS X mit Homebrew installieren . Bei installiertem Homebrew lautet der Befehl brew install dos2unix, der diese Formel verwendet .
Rory O'Kane
24

Eine Option ist die Verwendung unix2dos(und das dos2unixZurückgehen) in der Befehlszeile.

Eine andere Möglichkeit ist die Verwendung eines Texteditors:
Für vi:: set ff = dos, um die Zeilenenden als Zeilenenden festzulegen.
Für Emacs: Cx [ENTER] f dos [ENTER]

Für Ihren bevorzugten GUI-basierten Editor (zB jedit) empfehle ich, das Handbuch oder Google zu lesen.

Zuletzt, wenn Sie sich nicht mit einem Texteditor befassen möchten und dies nur mit gängigen Hilfsprogrammen und Ähnlichem tun möchten (oder wenn Sie unix2dos nicht installiert haben):

tr -d '\r' < infile > outfilevon Windows zu gehen -> Unix
awk 'sub("$", "\r")' unixfile.txt > winfile.txtvon Unix zu gehen -> Windows trkann nicht von Unix zu Windows gehen.

Chealion
quelle
dos2unix hat den Trick gemacht, aber danke für das Hilfsprogramm tr, es hätte in der Vergangenheit so viel Zeit sparen können!
Alexeit
Wenn eine Datei gemischte Zeilenende hat, stellen Sie sicher , dass es in der richtigen laden ff: :e ++ff=unix. Zumindest für die dos -> unixUmstellung macht es Sinn .
X-Yuri
Dieser awk one liner bringt einem Mann das Fischen bei, danke dafür. Ich werde in Zukunft etwas weniger hungrig sein
Gareth Davidson
13

Bearbeiten Sie es in Vim und verwenden Sie den set fileformatBefehl.

  • MS-DOS / Windows (CR + LF bricht ab) bis * nix (LF bricht nur ab)

    :set fileformat=unix
    :wq
    
  • * Nix zu MS-DOS / Windows

    :set fileformat=dos
    :wq
    
nedm
quelle
Gehen Sie dabei vorsichtig vor, wenn die Datei in der letzten Zeile noch keinen Zeilenumbruch enthält. vim fügt eine hinzu, es sei denn, Sie wissen, wie Sie es ablehnen sollen.
CesarB,
Nachdem ich stundenlang jede andere Lösung ausprobiert hatte, war dies der Lebensretter, den ich brauchte. Bestätigtes Verhalten unter OS X Yosemite mit hexdump -C- ebenfalls bestätigt, dass dies nicht klebrig ist - es wird pro viSitzung festgelegt
Techmag
8

Folgendes verwende ich, ähnlich wie Chealion, um Windows in Unix-Zeilenenden zu konvertieren:

tr -d \\015 < windows > unix
Josh
quelle
Das Plakat wollte Unix zu Windows-Zeilenenden. Und du bist einige Jahre zu spät mit deiner Antwort.
ott--
5
Wen interessiert es, wenn es "Jahre zu spät" ist? Es funktioniert immer noch, und es ist immer noch auf die Frage anwendbar. Ich habe nur eine weitere Option für Leser hinzugefügt, die darauf stoßen, wie ich. Außerdem fragt seine Frage nach Windows -> Unix und seine Beschreibung nach Unix -> Windows. Achselzucken
Josh
Recht. Vielleicht fügen Sie dann den anderen tr-Befehl zum Konvertieren von Unix in Windows hinzu.
ott--
Ich habe versucht, das Abstimmungsergebnis rückgängig zu machen, aber es wurde gemeldet, dass es gesperrt ist, bis der Artikel bearbeitet wurde.
ott--
@ott-- kein problem, ich habe für dich upvoted. ... warte, jetzt kann ich nicht für mich stimmen! ... dang ... :)
Alois Mahdal
1

Dies mit POSIX zu tun, ist schwierig:

  • POSIX Sed unterstützt \roder nicht \15. Selbst wenn dies der Fall -iist , ist die In-Place-Option nicht POSIX

  • POSIX Awk unterstützt \rund \15die -i inplaceOption ist jedoch nicht POSIX

  • d2u und dos2unix sind keine POSIX-Dienstprogramme , aber ex ist

  • POSIX ex nicht unterstützt \r, \15, \noder\12

So entfernen Sie Wagenrückläufe:

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

So fügen Sie Wagenrückläufe hinzu:

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