Frage Wie konvertiert man Zeilenumbrüche in einer Textdatei zwischen den Windows- und Unix / Linux-Formaten?


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

Ich habe eine * nix-Umgebung, aber ich muss Daten mit den Windows-Stil Zeilenumbrüchen importieren und exportieren. Ich dachte, es wäre ein Standard-Dienstprogramm oder Befehl, um dies zu tun, aber ich kann es nicht finden.


32
2018-05-08 04:44


Ursprung




Antworten:


Du suchst wahrscheinlich dos2unix, unix2dos, todos oder fromdos abhängig von Ihrer Verteilung. Ubuntu / Debian-Paket todos/fromdos Im Rahmen des Tofrodos Paket aus dem Speicher.


41
2018-05-08 04:55



Für den Fall, dass jemand diese Frage auf der Suche nach Windows - Lösungen, die Upstream - Site für dos2unix ist waterlan.home.xs4all.nl/dos2unix.htmlund es funktioniert auch in Windows. - womble♦
Sie können installieren dos2unix/unix2dos unter Mac OS X mit Homebrew. Wenn Homebrew installiert ist, lautet der Befehl brew install dos2unix, die verwendet diese Formel. - Rory O'Kane


Eine Option ist zu verwenden unix2dos (und dos2unix (Zurück) auf der Kommandozeile.

Eine andere Möglichkeit ist die Verwendung eines Texteditors:
Für vi:: Legen Sie ff = dos fest, um die Zeilenenden als Zeilenende zu definieren.
Für Emacs: C-x [ENTER] f dos [ENTER]

Für Ihren bevorzugten GUI-basierten Editor (z. B. Jedit) empfehle ich, das Handbuch oder Google zu überprüfen.

Schließlich, wenn Sie nicht mit einem Texteditor umgehen wollen und es nur mit häufigeren Dienstprogrammen und so tun (oder nicht unix2dos installiert haben):

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


23
2018-05-08 04:56



dos2unix hat den Trick gemacht, aber danke für den Nutzen von tr, es hätte so viel Zeit in der Vergangenheit sparen können! - alexeit
Wenn eine Datei gemischte Zeilenenden hat, stellen Sie sicher, dass sie ordnungsgemäß geladen ist ff: :e ++ff=unix. Zumindest macht es Sinn für dos -> unix Umwandlung. - x-yuri
Dieser achte Liner bringt einem Mann zum Fischen bei, danke dafür. Ich werde in Zukunft etwas weniger hungrig sein - Gareth Davidson


Bearbeiten Sie es in Vim und verwenden Sie die set fileformat Befehl.

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

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

    :set fileformat=dos
    :wq
    

12
2018-05-08 20:56



Seien Sie vorsichtig bei der Verwendung, wenn die Datei in der letzten Zeile noch keinen Zeilenumbruch hat; vim wird einen hinzufügen, wenn Sie nicht wissen, wie es zu sagen ist. - CesarB
Nach stundenlangen Versuchen jeder anderen Lösung war dies der Lebensretter, den ich brauchte. Bestätigtes Verhalten unter OS X Yosemite mit hexdump -C - Auch dies ist bestätigt nicht klebrig - es ist per eingestellt viSession - Techmag


Dies ist, was ich ähnlich wie Chealion verwende, um Windows in Unix Zeilenendungen zu konvertieren:

tr -d \\015 < windows > unix

7
2017-10-07 18:20



Das Plakat wollte Unix zu Windows-Zeilenenden. Und du bist ein paar Jahre zu spät mit deiner Antwort. - ott--
Wen kümmert 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 kommen, wie ich. Auch seine Frage fragt nach Windows -> Unix, und seine Beschreibung fragt nach Unix -> Windows. zucken - Josh
Recht. Vielleicht fügen Sie den anderen tr-Befehl hinzu, um Unix in Windows zu konvertieren. - ott--
Ich habe versucht, den Downvote rückgängig zu machen, aber er sagte, dass er gesperrt ist, bis der Artikel bearbeitet wurde. - ott--
@ ott-- kein Problem, ich habe für Sie upvoted. ...warte jetzt ich kann nicht für mich upvote! ... dang ... :) - Alois Mahdal


Dies mit POSIX zu tun ist schwierig:

  • POSIX Sed unterstützt nicht \r oder \15. Selbst wenn es so wäre, wäre es an Ort und Stelle Möglichkeit -i ist nicht POSIX

  • POSIX Awk unterstützt \r und \15aber die -i inplace Möglichkeit ist nicht POSIX

  • d2u und dos2unix sind nicht POSIX-Dienstprogramme, aber Ex ist

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

So entfernen Sie Wagenrücklauf:

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

So fügen Sie Wagenrücklauf hinzu:

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

0
2017-07-18 01:39