it-swarm.com.de

Konvertieren Sie Unix-Zeilenenden nach Windows

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 lieber nicht Cygwin installieren , wenn ich das vermeiden kann.

37
Matthew Scouten

Sie können sie mit dem Dienstprogramm unix2dos auf Ihrer Linux-Plattform konvertieren. Es gibt auch unix2dosVersionen 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
32
John T

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 :)

17
user45832

Die beste Methode zum rekursiven Durchsuchen von Ordnern, zum Ermöglichen von Dateifiltern und zum einfachen Suchen nach "\ r\n" und zum Ersetzen durch "\ n" 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 .

10
Matt

Verwenden Sie das Schweizer Feilenmesser .

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

Dieses Programm kann aber noch viel mehr.

8
harrymc

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

6
Rick V

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

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

Ändern Sie crlf in lf, wenn Sie den anderen Weg einschlagen möchten. HINWEIS: Sie sind noch nicht fertig, lesen Sie weiter

Geben Sie git status ein, um zu sehen, welche Dateien betroffen sind. Möglicherweise müssen Sie Zeilen wie hinzufügen

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

etc in .gitattributes um zu vermeiden, dass bestimmte Dateien konvertiert werden. Sie können bestimmte Dateien auch explizit als Text markieren

*.md text
*.css text

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

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

Verwenden Sie dann git status erneut, um festzustellen, welche Dateien geändert werden. Wenn Sie sicher sind, dass alle Dateien, die betroffen sein sollen, nach git status aufgelistet sind, führen Sie ein Commit durch

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 Datei .gitattributes und den Ordner .git löschen.

** Sichern Sie Ihre Dateien: Der git rm --cached -r löscht sie alle (obwohl sie sich theoretisch in Ihrem Git-Repo (dem .git-Ordner) befinden), was bedeutet, dass sie mit dem letzten Befehl git reset --hard wiederhergestellt werden sichern sie.

3
gman

In meiner Linux-Distribution gibt es zwei kleine Dienstprogramme namens fromdos und todos , die ich verwende für diese Aufgabe.

1
geek

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

1
nelaaro

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

In älteren Versionen von awk ist die Funktion sub nicht enthalten. Verwenden Sie in solchen Fällen denselben Befehl, ersetzen Sie jedoch awk durch gawk oder nawk.

Quelle

0
Neeme Praks

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.

0
pavium

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 umgekehrt vorgegangen wird .

(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 Werkzeuge sind Diese sind in Windows bereits verfügbar, ohne dass eine Drittanbieteranwendung installiert werden muss.

0
phuclv

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

Online-Konverter

Ich denke, ein GUI-FTP-Programmwird es automatisch tun

Batch/DOS-Einzeiler (entfernt leere Zeilen) :

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

Powershell:

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

Habe die letzten beiden von hier

0
gregg