Wenn Sie ein tun hexdump -C badfileund sehen 0x0d 0x0a"\r\n", ist das Ihr Problem.
Yzmir Ramirez
Antworten:
1075
dos2unix ist ein Befehlszeilenprogramm , das dies tut oder :%s/^M//gwenn Sie Ctrl- vCtrl- verwenden, mum ^ M einzugeben, oder Sie können :set ff=unixund vim wird es für Sie tun.
Wenn Sie Dateien häufig hin und her verschieben, möchten Sie sie möglicherweise nicht konvertieren, sondern tun :set ff=dos, damit vim weiß, dass es sich um eine DOS-Datei handelt, und DOS-Konventionen für Zeilenenden verwendet.
Vielen Dank. Ich habe vi + ': wq ++ ff = unix' <Dateipfad> für einen Faulen wie mich versucht.
a_secenthusiast
2
Dies sollte die am besten bewertete Antwort sein. :w +ff=unixist so viel schöner als die meisten anderen hier geschriebenen Sachen, und das Bash-Skript ist ein schöner Bonus.
Mkasberg
Die :eBefehle scheinen bei meiner Windows vim-Installation nichts zu bewirken. Meine Ansicht zeigt immer noch die ^MCodes.
Grant Birchmeier
160
Ich benutze normalerweise
:%s/\r/\r/g
Das scheint ein wenig seltsam, funktioniert aber aufgrund der Art und Weise, wie vim mit Linefeeds übereinstimmt. Ich finde es auch einfacher, mich zu erinnern :)
Dies funktioniert konsistent über Plattformen hinweg. Die beste Antwort hier.
Thebigjc
4
Ich hatte noch nie ein Problem damit :set ff=unix, aber die Datei, die ich heute geöffnet habe, muss besonders seltsam gewesen sein. Vim sagte, dass es bereits war, fileformat=unixaber alle Zeilenenden waren ^M. Diese Lösung hat bei mir funktioniert.
Chris B
15
Diese Lösung fügt mir unerwünschte zusätzliche Zeilen hinzu und verdoppelt die Anzahl der Zeilen in der Datei. :%s/\r//garbeitet stattdessen für mich.
Victor Zamanian
3
Victor, deine Dateien haben wahrscheinlich \ r \ n Endungen. Das \ r wird nicht als Zeilenumbruch gelesen, das \ n jedoch. In den Dateien, auf die ich stoße, befindet sich \ r und Sie müssen ein Zeilenumbruchzeichen hinzufügen.
Joeyjoejoejr
2
@ VictorZamanian's :%s/\r//gist die einzige Allzwecklösung - insbesondere für Dateien im gemischten Modus, die eine heterogene Beimischung von Zeilenumbrüchen im DOS- und UNIX-Stil enthalten. Die kanonischen Lösungen (zB :set ff=unix, :e ++ff=unix) übernehmen jede Zeile der aktuellen Pufferende im gleichen Newline Stil. Manchmal tun sie es; manchmal nicht. Stichwort sadface.
Cecil Curry
97
Ich bevorzuge den folgenden Befehl:
:set fileformat=unix
Sie können Ihre Datei auch verwenden macoder dosjeweils in eine Macintosh- oder MS-DOS / MS-Windows-Dateikonvention konvertieren. Und es macht nichts, wenn die Datei bereits im richtigen Format ist.
Weitere Informationen finden Sie in der vim-Hilfe:
Aus irgendeinem Grund hat das oben für mich unter Windows GVIM nicht funktioniert. Aber wenn es geändert wurde, :%s/\r//gfunktionierte es wie ein Zauber.
+1 für den Hinweis auf die offizielle Dokumentenseite. Informationen zum Verwenden des obigen Links finden Sie im Abschnitt "Konvertieren der aktuellen Datei" auf dieser Seite.
der Blechmann
Dieses + vim -b <Dateiname> hat wie ein Zauber funktioniert, danke, +1
Jan Molak
10
Konvertieren Sie das Verzeichnis der Dateien von dos nach Unix
Suchen Sie über die Befehlszeile und sed alle Dateien im aktuellen Verzeichnis mit der Erweiterung ".ext" und entfernen Sie alle "^ M".
Die folgenden Schritte können 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.
Der Kommentar zum Erscheinen des ^ M hat bei mir funktioniert. Nur "^ M" in mein vi einzugeben, hat nichts gebracht (nicht gefunden). DasCTRL + VCTRL+ MSequenz hat es aber perfekt gemacht.
Sie können :%sanstelle von verwenden :1,$s. %ist eine Abkürzung für 1,$.
der Blechmann
5
Ich habe einen sehr einfachen Weg gefunden: Öffnen Sie die Datei mit nano: nano file.txt
Drücken Sie CTRL+ Ozu retten, aber vor dem Drücken Enter, drücken Sie : ALT+ Dbetwen DOS und Unix / Linux - Zeilenende wechseln, oder: ALT+ Mwechseln betwen Mac und Unix / Linux - Zeilenende drücken Sie dann Enterzu speichern und CTRL+ Xzu beenden.
Auf einem Linux-Server hatte die Datei ^MEndungen. Speichern Sie als Dos, um zu behalten, speichern Sie als Linux, um zu entfernen. kann überprüfen mitcat -v
HattrickNZ
Bei dieser Frage geht es um Vim, nicht um Nano.
Grant Birchmeier
5
:g/Ctrl-v Ctrl-m/s///
CtrlMist das Zeichen \roder der Wagenrücklauf, den DOS-Zeilenenden hinzufügen. CtrlVweist vim an, ein Literal einzufügenCtrlM in die Befehlszeile .
Insgesamt ersetzt dieser Befehl alle \rdurch nichts und entfernt sie von den Zeilenenden.
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
Dadurch wird der Inhalt Ihres aktuellen Puffers an den Befehl dos2unix weitergeleitet und die Ergebnisse über den aktuellen Inhalt geschrieben. Vim wird Sie danach auffordern, die Datei neu zu laden
Normalerweise gibt es einen dos2unixBefehl, den Sie dafür verwenden können. Lesen Sie einfach das Handbuch, da sich die GNU- und BSD-Versionen hinsichtlich des Umgangs mit den Argumenten unterscheiden.
Wenn Sie eine Datei in NotePad oder NotePad ++ in Windows erstellen und auf Linux bringen und mit vim öffnen, wird am Ende jeder Zeile ^ M angezeigt. Um dies zu entfernen,
hexdump -C badfile
und sehen0x0d 0x0a
"\r\n"
, ist das Ihr Problem.Antworten:
dos2unix ist ein Befehlszeilenprogramm , das dies tut oder
:%s/^M//g
wenn Sie Ctrl- v Ctrl- verwenden, mum ^ M einzugeben, oder Sie können:set ff=unix
und vim wird es für Sie tun.Text & Tabellen auf der ‚Dateiformat‘ Einstellung sind hier , und das vim wiki eine umfassende hat Seite auf Zeilenende Conversions .
Wenn Sie Dateien häufig hin und her verschieben, möchten Sie sie möglicherweise nicht konvertieren, sondern tun
:set ff=dos
, damit vim weiß, dass es sich um eine DOS-Datei handelt, und DOS-Konventionen für Zeilenenden verwendet.quelle
:%s/^M//g
sollte sein:%s/\r//g
, weil^M
nur "Match Capital" M "am Anfang der Zeile" bedeutet.:%s/\r//g
hat für mich funktioniert,set ff=unix
es nichts tut. Vielleicht konvertiert es die Datei, aber alle^M
Zeichen sind noch da.Ändern Sie die Zeilenenden in der Ansicht:
Dies kann auch als Speichervorgang verwendet werden (: w allein speichert nicht mit den auf dem Bildschirm angezeigten Zeilenenden):
Und Sie können es über die Befehlszeile verwenden:
quelle
:w +ff=unix
ist so viel schöner als die meisten anderen hier geschriebenen Sachen, und das Bash-Skript ist ein schöner Bonus.:e
Befehle scheinen bei meiner Windows vim-Installation nichts zu bewirken. Meine Ansicht zeigt immer noch die^M
Codes.Ich benutze normalerweise
Das scheint ein wenig seltsam, funktioniert aber aufgrund der Art und Weise, wie vim mit Linefeeds übereinstimmt. Ich finde es auch einfacher, mich zu erinnern :)
quelle
:set ff=unix
, aber die Datei, die ich heute geöffnet habe, muss besonders seltsam gewesen sein. Vim sagte, dass es bereits war,fileformat=unix
aber alle Zeilenenden waren^M
. Diese Lösung hat bei mir funktioniert.:%s/\r//g
arbeitet stattdessen für mich.:%s/\r//g
ist die einzige Allzwecklösung - insbesondere für Dateien im gemischten Modus, die eine heterogene Beimischung von Zeilenumbrüchen im DOS- und UNIX-Stil enthalten. Die kanonischen Lösungen (zB:set ff=unix
,:e ++ff=unix
) übernehmen jede Zeile der aktuellen Pufferende im gleichen Newline Stil. Manchmal tun sie es; manchmal nicht. Stichwort sadface.Ich bevorzuge den folgenden Befehl:
Sie können Ihre Datei auch verwenden
mac
oderdos
jeweils in eine Macintosh- oder MS-DOS / MS-Windows-Dateikonvention konvertieren. Und es macht nichts, wenn die Datei bereits im richtigen Format ist.Weitere Informationen finden Sie in der vim-Hilfe:
quelle
^M
Zeichen.set fileformat=unix
zu meiner .vimrc-Datei hat funktioniert.:set fileformat=unix
von dos nach unix konvertieren.quelle
In Vim werden dadurch alle Wagenrückläufe entfernt und nur Zeilenumbrüche hinterlassen.
quelle
:%s/\r//g
funktionierte es wie ein Zauber.von: http://vim.wikia.com/wiki/Change_end-of-line_format_for_dos-mac-unix
[Esc]:% s / \ r $ //
quelle
Konvertieren Sie das Verzeichnis der Dateien von dos nach Unix
Suchen Sie über die Befehlszeile und sed alle Dateien im aktuellen Verzeichnis mit der Erweiterung ".ext" und entfernen Sie alle "^ M".
@ https://gist.github.com/sparkida/7773170
auch, wie oben erwähnt ^ M = Ctrl+V+ Ctrl+M(geben Sie nicht nur das Caret-Symbol "^" und M ein)
quelle
dos2unix
kann den Dateiinhalt direkt ändern.Sie können es direkt für die Datei verwenden, ohne dass eine temporäre Dateiumleitung erforderlich ist.
Das obige verwendet die angenommene US-Tastatur. Verwenden Sie die
-
Option 437, um die UK-Tastatur zu verwenden.quelle
(siehe: http://kb.iu.edu/data/acux.html )
quelle
Die folgenden Schritte können das Dateiformat für dos in Unix konvertieren:
Referenz: http://vim.wikia.com/wiki/Change_end-of-line_format_for_dos-mac-unix
quelle
Mit folgendem Befehl:
Holen Sie sich das
^M
Typ erscheinen CtrlVdann CtrlM. CtrlVfordert Vim auf, das nächste eingegebene Zeichen wörtlich zu nehmen.quelle
Der Kommentar zum Erscheinen des ^ M hat bei mir funktioniert. Nur "^ M" in mein vi einzugeben, hat nichts gebracht (nicht gefunden). DasCTRL + V CTRL+ MSequenz hat es aber perfekt gemacht.
Mein funktionierender Substitutionsbefehl war
und es sah auf meinem Bildschirm so aus:
quelle
:%s
anstelle von verwenden:1,$s
.%
ist eine Abkürzung für1,$
.Ich habe einen sehr einfachen Weg gefunden: Öffnen Sie die Datei mit nano:
nano file.txt
Drücken Sie CTRL+ Ozu retten, aber vor dem Drücken Enter, drücken Sie : ALT+ Dbetwen DOS und Unix / Linux - Zeilenende wechseln, oder: ALT+ Mwechseln betwen Mac und Unix / Linux - Zeilenende drücken Sie dann Enterzu speichern und CTRL+ Xzu beenden.
quelle
^M
Endungen. Speichern Sie als Dos, um zu behalten, speichern Sie als Linux, um zu entfernen. kann überprüfen mitcat -v
CtrlMist das Zeichen
\r
oder der Wagenrücklauf, den DOS-Zeilenenden hinzufügen. CtrlVweist vim an, ein Literal einzufügenCtrlM in die Befehlszeile .Insgesamt ersetzt dieser Befehl alle
\r
durch nichts und entfernt sie von den Zeilenenden.quelle
Sie können verwenden:
oder
dos2unix utility
.quelle
Sie können den folgenden Befehl verwenden:
:%s/^V^M//g
wobei '^' die Verwendungstaste bedeutet CTRL.
quelle
Der folgende Befehl wird zum Neuformatieren aller .sh-Dateien im aktuellen Verzeichnis verwendet. Ich habe ihn auf meinem Fedora-Betriebssystem getestet.
quelle
Geben Sie in vim Folgendes ein:
Dadurch wird der Inhalt Ihres aktuellen Puffers an den Befehl dos2unix weitergeleitet und die Ergebnisse über den aktuellen Inhalt geschrieben. Vim wird Sie danach auffordern, die Datei neu zu laden
quelle
So führen Sie die Linux-Konsole direkt aus:
vim file.txt +"set ff=unix" +wq
quelle
Normalerweise gibt es einen
dos2unix
Befehl, den Sie dafür verwenden können. Lesen Sie einfach das Handbuch, da sich die GNU- und BSD-Versionen hinsichtlich des Umgangs mit den Argumenten unterscheiden.BSD-Version:
GNU-Version:
Alternativ können Sie Ihre eigenen
dos2unix
mit einer der hier vorgeschlagenen Antworten erstellen , zum Beispiel:quelle
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
quelle
Obwohl dieses Thema sehr alt ist, möchte ich noch ein weiteres Zeug aus Wikia einfügen:
\n
Diese Füllung findet alle Wagenrücklaufzeichen (eine und mehrere Wiederholungen) bis zum Zeilenende und löscht sie, bleibt also einfach bei eol.quelle
Das ist mein Weg. Ich habe eine Datei in dos EOL geöffnet und beim Speichern der Datei wird diese automatisch in Unix EOL konvertiert
quelle
Wenn Sie eine Datei in NotePad oder NotePad ++ in Windows erstellen und auf Linux bringen und mit vim öffnen, wird am Ende jeder Zeile ^ M angezeigt. Um dies zu entfernen,
Geben Sie an Ihrem Linux-Terminal Folgendes ein
Dies wird die erforderliche Magie ausführen.
quelle
Ich wollte Zeilenumbrüche anstelle der ^ M's. Perl zur Rettung:
Oder um an stdout zu schreiben:
quelle