Konvertiert Unix-Zeilenenden nach Windows

38

Ich bin kürzlich von Linux zu Windows zurückgekehrt. Ich habe einige Dateien mit CRLFs, einige mit LFs und einige, die gemischt sind. Gibt es ein Hilfsprogramm, mit dem ich alle meine Unix-Dateien finden und in richtige CRLF-terminierte Dateien konvertieren kann?

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

Matthew Scouten
quelle
1
siehe: Zusammenhang superuser.com/questions/38744 superuser.com/questions/27060 superuser.com/questions/52044 ... jedes Werkzeug in den genannten kann umgekehrt werden , um zu erreichen , was Sie tun wollen
Quack quixote
Doppelte Frage
Ukanth
Die Lösungen in diesen sogenannten Duplikat-Fragen laufen alle auf Linux-Plattformen oder führen die entgegengesetzte Konvertierung durch. Ich habe kein Linux mehr. Ich habe Fenster.
Matthew Scouten
1
Sie sind alle für Windows über Cygwin, GnuWin32, UnxUtils oder ähnliches verfügbar. Ich glaube, es gibt Powershell-Skripte, die dies auch können, obwohl ich nicht genug darüber weiß, um irgendwelche Links bereitzustellen.
Quack Quijote
1
@quack: In der Frage wird speziell angegeben, dass der Benutzer mithilfe eines Windows-Dienstprogramms nach etwas sucht, das die Aufgabe unter Windows erledigt.
Brian Lacy

Antworten:

34

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
John T
quelle
Ich habe etwas Ähnliches gemacht, aber ich habe Python verwendet.
Matthew Scouten
2
@ Matthew Scouten: Also ... Sie haben ein Unix-Dienstprogramm gefunden, das unter Windows ausgeführt wird! Glückwunsch!
Quack Quijote
8
Ja und nein. Ich habe meinen eigenen Sprengsatz geschrottet. Ich hätte das von Anfang an tun können, aber ich hatte gehofft, 30 Minuten zu sparen. Leider war ich mit den verfügbaren Hilfsprogrammen nicht zufrieden. Das nächste, das ich gefunden habe, hat alle Binärdateien im Verzeichnis beschädigt.
Matthew Scouten
Bei der Konvertierung mit dos2unix und unix2dos treten Probleme auf. Wenn die Datei CRLF und LF gemischt hat, kann es vorkommen, dass einige Ereignisse nicht ersetzt werden.
pbies
17

Hier ist ein einfacher und schneller Weg.

Ziehe die Textdatei per Drag & Drop nach Chrome (ich kenne mich mit anderen Browsern nicht aus) und schneide sie dann aus und füge sie wieder in die Originaldatei ein :)

user45832
quelle
2
hehe ... diese antwort hat mich dazu gebracht, lol
ClintM 20.02.17
Alle Browser können problemlos Unix-Zeilenenden lesen, einschließlich IE. Aber auch dann kann Wordpad das, und auch das moderne Notepad . Was hier wichtig ist, ist, wie mehrere Dateien automatisch konvertiert werden
phuclv
10

Die beste Methode, um Ordner rekursiv zu durchsuchen, Dateifilter zuzulassen und einfach nach "\ r \ n" zu suchen und durch "\ n" zu ersetzen, war Notepad ++ .

Notepad ++ ist eines der besten kostenlosen Open-Source-Notepad-Programme für Windows. Es ist sehr einfach und mächtig. Es handhabte das Zeilenende Suchen / Ersetzen ganz gut. Ein Auftragnehmer checkt eine Reihe von .c- und .h-Dateien mit Linux \ r \ n-Zeilenenden in unser Repository ein. Da die meisten Anwender jedoch standardisierte Windows / Eclipse-Build-Tools verwenden, werden die Dateien erst erstellt, wenn die Zeilenenden konvertiert wurden .

Matt
quelle
8
Ich denke, Sie haben die Endungen dort umgekehrt: Linux ist \ n, Windows ist \ r \ n
Matthew Scouten
10
Notepad ++ hat auch ein einfaches Edit -> EOL ConversionMenü, wenn die Anzahl der zu konvertierenden Dateien gering ist.
user1071136
8

Verwenden Sie das Schweizer Feilenmesser .

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

Dieses Programm kann aber noch viel mehr.

Harrymc
quelle
Ich spezifiziere nicht, -norecweil ich möchte, dass eine Rekursion stattfindet, aber es scheint nicht so
Csaba Toth
6

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

In DOS CR / LF-Format konvertieren:

u2d filename

Zurück in das Unix CR-Format konvertieren:

d2u filename

Die Datei wird mit demselben Namen an Ort und Stelle belassen.

Genießen! Rick

Rick V
quelle
Dies wird manchmal genannt dos2unixoder , unix2dosfalls Sie es nicht als U2D oder d2u finden. Es gibt auchunix2mac
gtatr
3

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

Theoretisch könnten Sie so 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

Wechseln 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 sind. Möglicherweise müssen Sie Zeilen wie hinzufügen

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

usw., .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, bis git statusdahin aufgeführt sind, übernehmen Sie die Festschreibung

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

Jetzt checke alle Dateien nochmal aus

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

Sie sollten nun die von Ihnen 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öschungen sie alle (obwohl sie theoretisch in Ihrem git Repo (der .git Ordner) , die ist , wie sie durch den letzten Befehl gestellt bekommen git reset --hardEs ist nur da Dateien gelöscht werden immer es ist wahrscheinlich am besten , sie zu unterstützen . oben.

gman
quelle
1

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

Nelaaro
quelle
Das haben sie gesagt, als ich beim Umstieg auf Linux das umgekehrte Problem hatte. Ich stieß immer wieder auf Tools, die Probleme mit den falschen Zeilenenden hatten. Und NICHTS geht vernünftig mit gemischten Zeilenenden um.
Matthew Scouten
@Matthew Ich kenne die Unix / Windows Zeilenenden richtig. Ich verwende es für diesen Zweck in Windows-VMs, die ich unter Linux beim Bearbeiten von Dateien auf dem Hostsystem ausführe.
Nelaaro
Ich bin sicher, dass die von Ihnen empfohlenen Editoren einwandfrei funktionieren werden. Aber irgendwann muss ich die Textdatei einem anderen Tool zuführen, und dieses Tool wird es NICHT. Zu diesem Zeitpunkt wird ein Texteditor, der die Dinge gut handhabt, das Problem noch verschlimmern, indem er es versteckt. und ich wette, dass es immer noch mit gemischten Enden schlecht umgeht (oder zumindest mit Macken).
Matthew Scouten
1
+1 für die Notepad ++ - Option zum Konvertieren von Lügenendungen. Und hier ist, wie man es genauer macht (siehe "Methode 2"): staffwww.fullcoll.edu/brippe/csci123/saveAsUnix.aspx
wip
Notepad ++ hat bereits die Lösungen zum Konvertieren von Zeilenenden, Codierungen
ua
0

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 nach Windows im BINARY-Modus. Dann öffne ich TEXT-Dateien in Windows mit einem Editor, der beide Typen öffnen kann, und speichere sie gegebenenfalls in einer der beiden Formen.

Ich habe dafür den Programmers File Editor verwendet, aber Notepad ++ kann das auch. WordPad ist auch nützlich [zumindest zum Anzeigen von LF-terminierten Dateien].

Ich denke an die einfachen Textdateien, die möglicherweise unter Linux erstellt wurden und in der (Standard-) Welt von Windows lesbar sein müssen. Ich bin mir nicht sicher, was Sie unter "Unix-Dateien" verstanden haben.

Pavium
quelle
Das Problem bei dieser Methode ist, dass immer nur eine Datei gleichzeitig ausgeführt wird.
Matthew Scouten
"Unix-touched files" ist mein Wort für reine LF- und gemischte CRLF-LF-Dateien. Sobald eine Datei in UNIX-OID-Tools bearbeitet wurde, wird sie in der Regel mit LF-Zeilen "infiziert".
Matthew Scouten
2
Was ich wirklich sagte, war, dass sie durch die Auswahl der richtigen Software zum Anzeigen von Textdateien überhaupt nicht konvertiert werden müssen. Übrigens habe ich es vermieden, Sie dazu zu bringen, CRLF-terminierte Dateien als "richtig" zu bezeichnen. Es hängt ganz von Ihrem Standpunkt ab. Jede Methode ist für ein eigenes Betriebssystem geeignet. Wenn eine Datei auf 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
3
Sie vermuten falsch. Der ASCII-Standard wurde ursprünglich für Fernschreiber entwickelt und als CRLF-Standard vorgeschrieben. Die meisten Internetprotokolle (einschließlich HTTP, SMTP, FTP, IRC und viele andere) erfordern ebenfalls CRLF-Endungen (die meisten Implementierungen akzeptieren aus Gründen der Kompatibilität mit nicht kompatiblen Unix-Programmen Bare LF). In diesem Fall folgt Windows dem Standard und Unix und Mac brechen ihn.
Matthew Scouten
0

Um mehr Optionen anzubieten (obwohl mir die Hack-Antwort von user45832 am besten gefallen hat ):

Online-Konverter

Ich vermute, ein GUI-FTP-Programm erledigt das automatisch

Batch / DOS-Einzeiler (entfernt Leerzeilen) :

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

Habe die letzten beiden von hier

Gregg
quelle
0

Holen Sie sich AWK für Windows .

Konvertieren Sie Unix-Zeilenenden in Windows-Zeilenenden:

awk 'sub("$", "\r")' unixfile.txt > winfile.txt

Konvertieren Sie Windows-Zeilenenden in Unix-Zeilenenden:

awk '{ sub("\r$", ""); print }' winfile.txt > unixfile.txt

Ältere Versionen von awkenthalten die subFunktion nicht. In solchen Fällen verwenden den gleichen Befehl, sondern ersetzen awkmit gawkoder nawk.

Quelle

Neeme Praks
quelle
0

Auf Wikipedia gibt es eine Lösung in cmd:

TYPE unix_file | FIND /V "" > dos_file

In PowerShell gibt es verschiedene Möglichkeiten, dies zu tun, indem Sie das in dieser Frage Gesagte umkehren .

(Get-Content $file -Raw).Replace("`n", "`r`n") | Set-Content $path -Force

(Get-Content $infile) -join "`r`n" > $outfile

$text = [IO.File]::ReadAllText($original_file) -replace "`n", "`r`n"
[IO.File]::WriteAllText($original_file, $text)

Dies ist auch in VBScript und JScript möglich, die ebenfalls Tools sind, die bereits in Windows verfügbar sind, ohne dass eine Drittanbieteranwendung installiert werden muss.

phuclv
quelle
0

Meine Linux - Distribution hat zwei kleine Dienstprogramme genannt fromdosund todosdass ich für diese Aufgabe verwenden.

Aussenseiter
quelle
Das OP bittet um ein Windows-Tool
phuclv
-2

Früher habe ich die Datei in "Bearbeiten" geöffnet und gespeichert, als der Job erledigt war ...

Radek
quelle
Was ist "Bearbeiten"? Es gibt kein solches Tool in Windows 10
phuclv
offensichtlich habe ich editin DOS verwendet, aber diese Frage ist über Windows
phuclv
1
editFrüher war Windows ein Teil von bis zu Windows XP. Meine Antwort ist ungefähr 8 Jahre alt. In dieser Zeit editwar in vielen Fällen Teil der Windows-Installation ...
Radek