it-swarm-eu.dev

Konvertieren Sie DOS-Zeilenenden in Linux-Zeilenenden in vim

Wenn ich in Windows erstellte Dateien öffne, enden alle Zeilen mit ^M.
Wie lösche ich diese Zeichen auf einmal?

673
Bert Hekman

dos2unix ist ein Befehlszeilenprogramm, das dies ausführt, oder :%s/^M//g, wenn Sie es verwenden Ctrl-vCtrl-m um das ^ M einzugeben, oder Sie können :set ff=unix und vim wird es für Sie tun.

Dokumente mit der Einstellung 'Dateiformat' sind hier , und das VIM-Wiki enthält ein umfassendes Konvertierung von Seiten am Zeilenende .

Wenn Sie Dateien häufig hin und her verschieben, möchten Sie sie möglicherweise nicht konvertieren, sondern :set ff=dos ausführen, damit vim erkennt, dass es sich um eine DOS-Datei handelt, und DOS-Konventionen für Zeilenenden verwendet.

1021
pjz

Ändern Sie die Zeilenenden in der Ansicht:

:e ++ff=dos
:e ++ff=mac
:e ++ff=unix

Dies kann auch als Speichervorgang verwendet werden (: w alleine speichert nicht mit den auf dem Bildschirm angezeigten Zeilenenden):

:w ++ff=dos
:w ++ff=mac
:w ++ff=unix

Und Sie können es über die Befehlszeile verwenden:

for file in *.cpp
do 
    vi +':w ++ff=unix' +':q' "$file"
done
260
Ludvig A. Norin

Ich benutze normalerweise

:%s/\r/\r/g

das scheint etwas seltsam zu sein, funktioniert aber aufgrund der Art und Weise, wie vim mit Zeilenvorschüben übereinstimmt. Ich finde es auch leichter, mich zu erinnern :)

155
t-dub

Ich bevorzuge den folgenden Befehl:

:set fileformat=unix

Sie können auch mac oder dos verwenden, um Ihre Datei in eine Macintosh- oder MS-DOS/MS-Windows-Dateikonvention zu konvertieren. Und es macht nichts, wenn die Datei bereits im richtigen Format ist.

Weitere Informationen finden Sie in der vim-Hilfe:

:help fileformat
81
:%s/\r+//g

In Vim werden alle Zeilenumbrüche entfernt und nur Zeilenumbrüche zurückgelassen.

19
mercutio

:set fileformat=unix zum Konvertieren von DOS nach UNIX.

17
13
Alex Gartrell

dos2unix kann den Dateiinhalt direkt ändern.

Sie können es direkt für die Datei verwenden, ohne dass eine temporäre Dateiumleitung erforderlich ist.

dos2unix input.txt input.txt

Oben wird die angenommene US-Tastatur verwendet. Verwenden Sie die Option -437, um die UK-Tastatur zu verwenden.

dos2unix -437 input.txt input.txt

Konvertiert Dateiverzeichnisse von dos nach Unix

Suchen Sie mit der Befehlszeile und sed nach allen Dateien im aktuellen Verzeichnis mit der Erweiterung ".ext" und entfernen Sie alle "^ M".

@ https://Gist.github.com/sparkida/777317

find $(pwd) -type f -name "*.ext" | while read file; do sed -e 's/^M//g' -i "$file"; done;

auch, wie oben erwähnt ^ M Ctrl+V + Ctrl+M (Geben Sie nicht nur das Caret-Symbol "^" und M ein.)

8
Sparkida
tr -d '\15\32' < winfile.txt > unixfile.txt

(siehe: http://kb.iu.edu/data/acux.html )

7
MichaelD

Mit folgendem Befehl:

:%s/^M$//g 

Lass den ^M als Typ erscheinen CtrlV dann CtrlMCtrlV Weist Vim an, das nächste eingegebene Zeichen wörtlich zu nehmen.

5
Dave Webb

Mit den folgenden Schritten können Sie das Dateiformat für dos in Unix konvertieren:

:e ++ff=dos  Edit file again, using dos file format ('fileformats' is ignored).[A 1]
:setlocal ff=unix    This buffer will use LF-only line endings when written.[A 2]
:w   Write buffer using unix (LF-only) line endings.

Referenz: http://vim.wikia.com/wiki/Change_end-of-line_format_for_dos-mac-unix

5
ajitomatix

Sie können verwenden:

vim somefile.txt +"%s/\r/\r/g" +wq

oder dos2unix utility.

4
Christy Wald
:g/Ctrl-v Ctrl-m/s///

CtrlM ist das Zeichen \r oder der Wagenrücklauf, den DOS-Zeilenenden hinzufügen. CtrlV Weist vim an, ein Literal einzufügen CtrlM Zeichen in der Befehlszeile.

Insgesamt ersetzt dieser Befehl alle \r durch nichts und entfernt sie von den Zeilenenden.

4
Rob Wells

Der Kommentar zum Erscheinen des ^ M hat bei mir funktioniert. Nur die Eingabe von "^ M" in meinem vi hat nichts gebracht (nicht gefunden). Das CTRL+VCTRL+M Sequenz hat es perfekt gemacht.

Mein funktionierender Vertretungsbefehl war

:%s/Ctrl-V Ctrl-M/\r/g

und es sah auf meinem Bildschirm so aus:

:%s/^M/\r/g
4
Dannid

Ich habe einen sehr einfachen Weg gefunden: Öffne die Datei mit nano: nano file.txt

Drücken Sie CTRL+O zu speichern, aber vor dem Drücken von Enter, Drücken Sie: ALT+D Umschalten zwischen DOS- und Unix/Linux-Zeilenenden oder: ALT+M Um zwischen den Zeilenenden von Mac und Unix/Linux umzuschalten, drücken Sie Enter zu retten und CTRL+X beenden.

4
Stefan Sjöberg

Sie können den folgenden Befehl verwenden:
:%s/^V^M//g
wobei das '^' die Verwendung bedeutet CTRL Schlüssel.

3
JayG

der folgende Befehl wird zum Neuformatieren aller .sh-Dateien im aktuellen Verzeichnis verwendet. Ich habe ihn auf meinem Fedora-Betriebssystem getestet.

for file in *.sh; do awk '{ sub("\r$", ""); print }' $file >luxubutmp; cp -f luxubutmp $file; rm -f luxubutmp ;done
2
user3220487

Ich wusste, dass ich das irgendwo gesehen hatte. Hier ist der FreeBSD Login-Tipp:

Müssen Sie alle diese ^ M-Zeichen aus einer DOS-Datei entfernen? Versuchen

tr -d \\r < dosfile > newfile
    -- Originally by Dru <[email protected]>
1
Albaro Pereyra

Normalerweise gibt es einen dos2unix -Befehl, den Sie dafür verwenden können. Lesen Sie das Handbuch, da sich die GNU - und BSD-Versionen hinsichtlich des Umgangs mit den Argumenten unterscheiden.

BSD-Version:

dos2unix $FILENAME $FILENAME_OUT
mv $FILENAME_OUT $FILENAME

GNU-Version:

dos2unix $FILENAME

Alternativ können Sie Ihren eigenen dos2unix mit einer der hier vorgeschlagenen Antworten erstellen, zum Beispiel:

function dos2unix(){
    [ "${!}" ] && [ -f "{$1}" ] || return 1;

    { echo ':set ff=unix';
      echo ':wq';
    } | vim "${1}";
}
1
dsm

So starten Sie die Linux-Konsole direkt: vim file.txt +"set ff=unix" +wq

1
CBuzatu

Geben Sie in vim Folgendes ein:

:w !dos2unix %

Dies leitet den Inhalt Ihres aktuellen Puffers an den Befehl dos2unix weiter und schreibt die Ergebnisse über den aktuellen Inhalt. Vim wird danach fragen, ob die Datei neu geladen werden soll

1
Tallak Tveide

wenn Sie eine Datei in NotePad oder NotePad ++ in Windows erstellen und diese unter Linux öffnen, wird am Ende jeder Zeile ^ M angezeigt. Um dies zu entfernen,

Geben Sie an Ihrem Linux-Terminal Folgendes ein

dos2unix filename.ext

Dies wird die erforderliche Magie tun.

0
Santle Camilus

Obwohl dieses Thema sehr alt ist, möchte ich noch etwas aus Wikia hinzufügen:

%s/\r\+$//g

diese Füllung findet alle Wagenrücklaufzeichen (eine oder mehrere Wiederholungen) bis zum Ende der Zeile und löscht sie, also bleibt nur \n bei eol.

0
loadaverage

Das ist mein Weg. Ich habe eine Datei in dos EOL geöffnet und wenn ich die Datei speichere, wird sie automatisch in Unix EOL konvertiert

autocmd BufWrite * :set ff=unix
0
Thomas PABST

Ich wollte Zeilenumbrüche anstelle der ^ Ms. Perl zur Rettung:

Perl -pi.bak -e 's/\x0d/\n/g' Excel_created.txt

Oder schreiben Sie an stdout:

Perl -p -e 's/\x0d/\n/g' < Excel_created.txt
0
user3379574