Konvertieren Sie Unix-Zeilenenden in Windows

53523
Matthew Scouten

Ich bin kürzlich von Linux zu Windows zurückgekehrt. Ich habe einige Dateien mit CRLFs, einige mit LFs und andere, die gemischt sind. Gibt es ein Dienstprogramm, das mir hilft, alle meine mit Unix berührten Dateien zu finden und sie in korrekte CRLF-Dateien zu konvertieren?

Das Dienstprogramm muss unter Windows und nicht unter Linux ausgeführt werden. Ich bin schon umgezogen Ich würde Cygwin lieber nicht installieren, wenn ich es vermeiden kann.

35
verwandt: siehe http://superuser.com/questions/38744 http://superuser.com/questions/27060 http://superuser.com/questions/52044 ... alle in diesen genannten Tools können umgekehrt werden, um das zu erreichen du willst machen quack quixote vor 15 Jahren 1
Doppelte Frage ukanth vor 15 Jahren 0
Die Lösungen in den sogenannten Duplicate-Fragen laufen alle auf Linux-Plattformen oder führen die umgekehrte Konvertierung aus. Ich habe keinen Linux mehr. Ich habe fenster Matthew Scouten vor 15 Jahren 0
Sie sind alle für Windows über Cygwin, GnuWin32, UnxUtils oder dergleichen verfügbar. Ich glaube, es gibt Powershell-Skripte, die das auch können, obwohl ich nicht genug davon weiß, um Links zu liefern. quack quixote vor 15 Jahren 1
@quack: In der Frage wird ausdrücklich angegeben, dass der Benutzer mit einem Windows-Dienstprogramm nach etwas sucht, das die Aufgabe unter Windows erfüllt. Brian Lacy vor 14 Jahren 1
Duplikate: [Windows-Befehl zum Konvertieren von Unix-Zeilenenden?] (http://stackoverflow.com/q/17579553/995714), [Weg zum Konvertieren von CR in CRLF in der Textdatei für alle Zeilen, die CMD verwenden] (http: / /stackoverflow.com/q/19912941/995714) phuclv vor 7 Jahren 0

13 Antworten auf die Frage

31
John T

Sie können sie mit dem unix2dosDienstprogramm auf Ihrer Linux-Plattform konvertieren . Es gibt auch unix2dos Versionen für Windows .

Wenn Sie Perl installiert haben, können Sie auch diesen einen Liner verwenden:

perl -p -e 's/\n/\r\n/' < UNIX_LF.txt > WINDOWS_CRLF.txt 
Ich habe etwas Ähnliches gemacht, aber ich habe Python benutzt. Matthew Scouten vor 15 Jahren 0
@Matthew Scouten: also ... du hast ein Unix-Dienstprogramm gefunden, das unter Windows läuft! Glückwunsch! quack quixote vor 15 Jahren 2
Ja und nein. Ich WROTE mein eigenes Dienstprogramm. Ich hätte das von Anfang an tun können, aber ich hoffte, 30 Minuten sparen zu können. Leider war ich mit den verfügbaren Dienstprogrammen nicht zufrieden. Die nächsten, die ich gefunden habe, haben alle Binärdateien im Verzeichnis beschädigt. Matthew Scouten vor 15 Jahren 8
Bei der Konvertierung mit dos2unix und unix2dos treten Probleme auf. Wenn die Datei CRLF und LF gemischt hat, kann es vorkommen, dass einige Vorkommnisse nicht ersetzt werden. pbies vor 6 Jahren 0
17
user45832

Hier ist ein einfacher und schneller Weg.

Ziehen Sie die Textdatei in Chrome (ich kenne andere Browser nicht) und schneiden Sie sie dann in die Originaldatei zurück :)

hehe… diese Antwort hat mich zum Lol gebracht ClintM vor 7 Jahren 1
Alle Browser können Unix-Zeilenenden problemlos lesen, einschließlich IE. Aber auch dann kann Wordpad das tun, und das auch [moderner Notizblock] (https://blogs.msdn.microsoft.com/commandline/2018/05/08/extended-eol-in-notepad/). Wichtig ist hier, wie Sie mehrere Dateien automatisch konvertieren phuclv vor 6 Jahren 0
10
Matt

Ich fand es am besten, rekursiv durch Ordner zu gehen, Dateifilter zuzulassen und eine einfache Suche nach "\ r \ n" zuzulassen und sie durch "\ n" zu ersetzen, war Notepad ++ .

Notepad ++ ist eines der besten, kostenlosen Open Source Notepad-Programme für Windows. Es ist sehr einfach und kraftvoll. Es hat die Zeilenende Suche / Ersetzen gut gehandhabt. Ein Auftragnehmer prüft eine Reihe von .c- und .h-Dateien in unserem Repository mit Linux-Endungen. Da jedoch die meisten Benutzer Windows / Eclipse-Build-Tools standardisiert haben, werden die Dateien erst erstellt, wenn die Zeilenenden konvertiert werden .

Ich denke, Sie haben die Endungen dort umgekehrt: Linux ist \ n, Windows ist \ r \ n Matthew Scouten vor 13 Jahren 8
Notepad ++ hat auch ein einfaches Menü "Bearbeiten -> EOL-Konvertierung", wenn die Anzahl der zu konvertierenden Dateien gering ist. user1071136 vor 12 Jahren 10
8
harrymc

Verwenden Sie das Schweizer Feilenmesser .

Beispiel: sfk addcr -dir . -file .txt -norec
Ändert LF-Endungen in CR / LF für Windows in allen TXT-Dateien des aktuellen Verzeichnisses, jedoch NICHT innerhalb von Unterverzeichnissen (keine Rekursion).

Dieses Programm leistet jedoch noch viel mehr.

Ich nenne '-norec' nicht, weil ich eine Rekursion will, aber es scheint nicht so Csaba Toth vor 7 Jahren 0
6
Rick V

Unter Cygwin können Sie mit zwei integrierten Dienstprogrammen zwischen Unix- und "DOS" -AKA-Windows-Dateien konvertieren:

Konvertieren Sie das DOS CR / LF-Format:

u2d filename 

Zurück in das Unix CR-Format konvertieren:

d2u filename 

Die Datei bleibt mit demselben Namen bestehen.

Genießen! Rick

Dies wird manchmal als "dos2unix" oder "unix2dos" bezeichnet, falls Sie es nicht als u2d oder d2u finden können. Es gibt auch "unix2mac" gtatr vor 6 Jahren 0
3
gman

Ich werde diese Lösung da draußen werfen. Git wird das tun. Siehe diesen Beitrag darüber

Theoretisch könnten Sie also einen ganzen Baum konvertieren

cd root/of/tree git init . git add . git commit -m "initial commit" echo "* text eol=crlf" > .gitattributes git rm --cached -r . git reset --hard 

Ändern Sie crlfzu, lfwenn Sie den anderen Weg gehen möchten. HINWEIS: Sie sind noch nicht fertig, lesen Sie weiter

Geben Sie ein, um git statuszu sehen, welche Dateien betroffen sein werden. Möglicherweise müssen Sie Zeilen wie hinzufügen

*.jpg binary *.png binary *.gif binary 

etc, .gitattributesum das Konvertieren bestimmter Dateien zu vermeiden. Sie können bestimmte Dateien auch explizit als Text markieren

*.md text *.css text 

Dann wiederholen Sie einfach diese 2 Zeilen, nachdem Sie bearbeitet haben .gitattributes

git rm --cached -r . git reset --hard 

Verwenden Sie dann git statuserneut, um zu sehen, welche Dateien geändert werden. Wenn Sie sicher sind, dass alle Dateien, die betroffen sein sollen, beim git statusCommit aufgeführt sind

git add . git commit -m "normalize line endings" 

Überprüfen Sie nun alle Dateien erneut

git rm --cached -r . git reset --hard 

Sie sollten nun die gewünschten Zeilenenden haben

** HINWEIS: Wenn Sie git bereits verwendet haben, überspringen Sie die ersten 3 Befehle. Wenn Sie git nicht verwendet haben, können Sie jetzt die .gitattributesDatei und den .gitOrdner löschen .

** Sichern Sie Ihre Dateien: Die git rm --cached -rlöscht sie alle (obwohl sie theoretisch in Ihrem git repo (dem .git-Ordner) sind. Dadurch werden sie mit dem letzten Befehl wiederhergestellt git reset --hard. Da Dateien gelöscht werden, ist es wahrscheinlich am besten, sie zu sichern oben.

1
geek

Meine Linux-Distribution hat zwei kleine Dienstprogramme namens fromdos und todos, die ich für diese Aufgabe verwende.

Das OP fragt nach einem * Windows-Tool * phuclv vor 6 Jahren 0
1
nelaaro

Verwenden Sie einen Texteditor, der beide Zeilenenden wie SciTE oder Notepad ++ versteht, wenn Sie nicht alle Zeilenenden in all Ihren Dateien konvertieren müssen, die gesamte Datei jedoch nicht in der ersten Zeile gebündelt sehen möchten.

Das sagten sie, als ich beim Umstieg auf Linux das umgekehrte Problem hatte. Ich stieß immer wieder auf Werkzeuge, die Probleme mit den falschen Zeilenenden hatten. Und NICHTS behandelt gemischte Zeilenenden angemessen. Matthew Scouten vor 13 Jahren 0
@Matthew Ich kenne die Scite-Handle [unix / windows] (http://www.scintilla.org/ScintillaDoc.html#LineEndings) korrekt. Ich verwende es zu diesem Zweck in den Windows-vms, die ich beim Bearbeiten von Dateien auf dem Host-System unter Linux ausführen. nelaaro vor 13 Jahren 0
Ich bin sicher, dass die von Ihnen empfohlenen Editoren gut funktionieren. Aber irgendwann muss ich die Textdatei einem anderen Werkzeug zuführen, und dieses Werkzeug wird NICHT. An diesem Punkt wird ein Texteditor, der die Dinge gut verarbeitet, das Problem verschleiern. und ich wette, dass es immer noch schlecht mit gemischten Enden (oder zumindest mit Macken) umgeht. Matthew Scouten vor 13 Jahren 0
+1 für die Notepad ++ - Option zum Konvertieren von Lügenenden. Und wie das genauer geht (siehe "Methode 2"): http://staffwww.fullcoll.edu/brippe/csci123/saveAsUnix.aspx wil vor 12 Jahren 1
Notepad ++ hat bereits die Lösungen zum Konvertieren von Zeilenenden, Kodierungen unter anderem phuclv vor 7 Jahren 0
0
pavium

Es gibt viele Möglichkeiten, die Eoln-Zeichen in TEXT-Dateien zu übersetzen, und jeder hat einen Favoriten.

Ich übertrage jedoch immer Dateien von Linux an Windows im BINARY-Modus, dann öffne ich TEXT-Dateien in Windows mit einem Editor, der beide Typen öffnen kann, und speichere sie gegebenenfalls in beiden Formaten.

Ich habe Programmers File Editor dafür verwendet, aber Notepad ++ kann das auch. WordPad ist auch [zumindest für die Anzeige von mit LF beendeten Dateien] nützlich .

Ich denke an die einfachen Textdateien, die möglicherweise aus Linux stammen und in der (defacto-Standard-) Welt von Windows lesbar sein müssen. Ich bin mir nicht sicher, was Sie mit "Unix-Dateien" meinen.

Das Problem bei dieser Methode ist, dass jeweils nur eine Datei erstellt wird. Matthew Scouten vor 15 Jahren 0
"Unix-berührte Dateien" ist mein Wort für LF-Dateien und gemischte CRLF-LF-Dateien. Nachdem eine Datei in Unix-Oid-Tools bearbeitet wurde, neigt sie dazu, mit LF-reinen Zeilen "infiziert" zu werden. Matthew Scouten vor 15 Jahren 0
Was ich wirklich sagte, war, dass die Auswahl der richtigen Software zum Anzeigen von Textdateien überhaupt nicht konvertiert werden muss. Übrigens, ich habe es vermieden, Sie zur Aufgabe zu bringen, CRLF-Dateien als "richtig" zu bezeichnen. Das hängt ganz von Ihrem Standpunkt ab. Jede Methode ist in ihrem eigenen Betriebssystem richtig. Wenn eine Datei in ein anderes Betriebssystem verschoben wird, stellen wir fest, dass Win / Mac / Linux alle unterschiedlich sind. Ich vermute, dass die Unix / Linux-Methode die ursprüngliche ist. pavium vor 15 Jahren 2
Du vermutest falsch. Der ASCII-Standard wurde ursprünglich für Fernschreibmaschinen entwickelt und mit CRLF versehen. Die meisten Internetprotokolle (einschließlich HTTP, SMTP, FTP, IRC und viele andere) erfordern auch CRLF-Endungen (die meisten Implementierungen akzeptieren nur LF, um Kompatibilität mit nicht kompatiblen Unix-Programmen zu gewährleisten). In diesem Fall folgt Windows dem Standard und Unix und Mac brechen es. Matthew Scouten vor 14 Jahren 3
0
gregg

Um mehr Optionen anzubieten (auch wenn mir User45832 am besten gefallen hat ):

Online-Konverter

Ich denke, ein GUI-FTP-Programm wird dies automatisch tun

Batch / DOS-Einzeiler (entfernt leere Zeilen) :

FOR /F "eol= delims= usebackq" %a IN (infile.txt) DO (ECHO %a>> outfile.txt) 

Power Shell:

gc infile.txt | %{$_.split("`n")} | Out-File outfile.txt 

Ich habe die letzten beiden von hier