Wenn ich in Windows erstellte Dateien öffne, enden alle Zeilen mit ^M
.
Wie lösche ich diese Zeichen auf einmal?
Wenn ich in Windows erstellte Dateien öffne, enden alle Zeilen mit ^M
.
Wie lösche ich diese Zeichen auf einmal?
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.
:%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:
:e ++ff=dos
:e ++ff=mac
:e ++ff=unix
Dies kann auch als Speichervorgang verwendet werden (: w allein 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
: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
:%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 :)
: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:
:set fileformat=unix
Sie können Ihre Datei auch verwenden mac
oder dos
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:
:help fileformat
^M
Zeichen.
set fileformat=unix
zu meiner .vimrc-Datei hat funktioniert.
:set fileformat=unix
von dos nach unix konvertieren.
:%s/\r+//g
In Vim werden dadurch alle Wagenrückläufe entfernt und nur Zeilenumbrüche hinterlassen.
:%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 $ //
@ https://gist.github.com/sparkida/7773170
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)
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
Das obige verwendet die angenommene US-Tastatur. Verwenden Sie die -
Option 437, um die UK-Tastatur zu verwenden.
dos2unix -437 input.txt input.txt
tr -d '\15\32' < winfile.txt > unixfile.txt
(siehe: http://kb.iu.edu/data/acux.html )
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.
Referenz: http://vim.wikia.com/wiki/Change_end-of-line_format_for_dos-mac-unix
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
:%s/Ctrl-V Ctrl-M/\r/g
und es sah auf meinem Bildschirm so aus:
:%s/^M/\r/g
:%s
anstelle von verwenden :1,$s
. %
ist eine Abkürzung für 1,$
.
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.
^M
Endungen. Speichern Sie als Dos, um zu behalten, speichern Sie als Linux, um zu entfernen. kann überprüfen mitcat -v
Sie können verwenden:
vim somefile.txt +"%s/\r/\r/g" +wq
oder dos2unix utility
.
Geben Sie in vim Folgendes ein:
:w !dos2unix %
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 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:
dos2unix $FILENAME $FILENAME_OUT
mv $FILENAME_OUT $FILENAME
GNU-Version:
dos2unix $FILENAME
Alternativ können Sie Ihre 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}";
}
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 <genesis@istar.ca>
Obwohl dieses Thema sehr alt ist, möchte ich noch ein weiteres Zeug aus Wikia einfügen:
%s/\r\+$//g
\n
Diese Füllung findet alle Wagenrücklaufzeichen (eine und mehrere Wiederholungen) bis zum Zeilenende und löscht sie, bleibt also einfach bei eol.
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
autocmd BufWrite * :set ff=unix
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
dos2unix filename.ext
Dies wird die erforderliche Magie ausführen.
Ich wollte Zeilenumbrüche anstelle der ^ M's. Perl zur Rettung:
perl -pi.bak -e 's/\x0d/\n/g' excel_created.txt
Oder um an stdout zu schreiben:
perl -p -e 's/\x0d/\n/g' < excel_created.txt
hexdump -C badfile
und sehen0x0d 0x0a
"\r\n"
, ist das Ihr Problem.