Beim Öffnen der Datei werden vim
merkwürdige ^M
Zeichen angezeigt .
Leider kommt die weltweit beliebteste Suchmaschine mit Sonderzeichen in Abfragen nicht gut zurecht. Deshalb frage ich hier:
Was ist das für ein
^M
Charakter?Wie konnte es dorthin gekommen sein?
Wie werde ich es los?
vim
special-characters
Christoph Wurm
quelle
quelle
help digraph-table
.Antworten:
Das
^M
ist ein Wagenrücklaufzeichen. Wenn Sie dies sehen, sehen Sie wahrscheinlich eine Datei, die aus der DOS / Windows-Welt stammt, in der ein Zeilenende durch ein Wagenrücklauf- / Zeilenumbruch-Paar gekennzeichnet ist, während in der Unix-Welt das Zeilenende wird durch einen einzelnen Zeilenumbruch markiert.Lesen Sie diesen Artikel für mehr Details und auch den Wikipedia-Eintrag für Newline .
In diesem Artikel wird erläutert, wie Sie vim so einrichten, dass Dateien mit verschiedenen Zeilenende-Markierungen transparent bearbeitet werden.
Wenn Sie eine Datei mit
^M
am Ende einiger Zeilen haben und diese entfernen möchten, verwenden Sie dies in Vim:(Drücken Sie Ctrl+ V Ctrl+ M, um das einzufügen
^M
.)quelle
:%s/^M/\r/g
stattdessen,^M
das^M
Zeichen zu entfernen und durch ein Newline-Zeichen zu ersetzen\r
. Ohne%
gilt der Befehl nur für die aktuelle Zeile. Und ich kam über einige Beispiele , bei denen^M
nicht am Ende der Zeile ist, wieThe first line.^MThe second line.
:%s/^M/
^M
in UNIX verwendet wird\n
in Unix verwendet wird, was korrekt ist. Das ist ASCII-Code10
, auch bekannt als^J
.Die meisten UNIX-Betriebssysteme haben ein Hilfsprogramm
dos2unix
, das die CRLF in LF konvertiert. Die anderen Antworten beziehen sich auf die Frage "Was sind sie".quelle
Eine einfachere Möglichkeit besteht darin, den folgenden Befehl zu verwenden:
Dieser Befehl funktioniert auch mit Pfadmustern, z
Wenn es nicht funktioniert, versuchen Sie es mit einem anderen Modus:
-c
Stellen Sie den Konvertierungsmodus ein. Wobei CONVMODE eine der folgenden ist:ascii, 7bit, iso, mac
wobei CONVMODEascii
die Standardeinstellung ist.quelle
Das hat bei mir funktioniert
Der Befehl: e ++ ff = dos weist Vim an, die Datei erneut zu lesen und das DOS-Dateiformat zu erzwingen. Vim entfernt nur CRLF- und LF-Zeilenenden und belässt nur den Text jeder Zeile im Puffer.
dann
und schlussendlich
quelle
ff
verweist Format einzureichen? Was ist++ff
?Eine andere Möglichkeit, Zeilenumbrüche zu entfernen, ist der
tr
Befehl.Ich habe ein kleines Skript, das so aussieht
quelle
Sie können dies aufräumen mit
sed
:Der Trick ist, wie man den Wagenrücklauf richtig eingibt. Im Allgemeinen müssen Sie
C-v C-m
eingeben, um einen wörtlichen Wagenrücklauf einzugeben. Sie können auch die Arbeit an Ort und Stelle mit habenquelle
Was ist das ^ M?
Das ^ M ist ein Wagenrücklaufzeichen. Wenn Sie dies sehen, sehen Sie wahrscheinlich eine Datei, die aus der DOS / Windows-Welt stammt, in der ein Zeilenende durch ein Wagenrücklauf- / Zeilenumbruch-Paar gekennzeichnet ist, während in der Unix-Welt das Zeilenende wird durch einen einzelnen Zeilenumbruch markiert.
Wie konnte es dorthin gekommen sein?
Wenn sich das Dateiformat ändert.
Wie werde ich es los?
öffne deine Datei mit
Speichern Sie es mit folgendem Befehl
quelle
In meinem Fall,
Nichts oben hat funktioniert, ich hatte eine CSV-Datei von meinem Mac auf den Linux-Rechner kopiert und ich habe alle oben genannten Befehle verwendet, aber nichts hat geholfen, außer den folgenden
Ich hatte eine Datei, in der ^ M Zeichen zwischen Zeilen zwischengeschaltet waren
quelle
Sie können Vim im Ex-Modus verwenden:
-b
Binärmodus%
Wählen Sie alle Zeilen auss
Ersatz\r
Wagenrücklaufx
speichern und schließenquelle
Fügen Sie Ihrem ~ / .vimrc die folgende Zeile hinzu
Wenn Sie eine Datei mit den Windows-Zeilenenden haben, führen Sie den Befehl ": Tounix" aus.
quelle
In der Vergangenheit habe ich selbst gesehen, dass Konfigurationsdateien nicht richtig analysiert werden und sich über Whitespace beschweren, aber wenn Sie vi und eine Set-Liste ausführen, wird das Whitespace nicht angezeigt. Grep filename [[Leerzeichen]] zeigt Ihnen ^ M
Dann
dos2unix file
hilft esquelle