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//gwenn Sie Ctrl- v Ctrl- verwenden, mum ^ M einzugeben, oder Sie können :set ff=unixund 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//gsollte sein :%s/\r//g, weil ^Mnur "Match Capital" M "am Anfang der Zeile" bedeutet.
:%s/\r//ghat für mich funktioniert,
set ff=unixes nichts tut. Vielleicht konvertiert es die Datei, aber alle ^MZeichen 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=unixist so viel schöner als die meisten anderen hier geschriebenen Sachen, und das Bash-Skript ist ein schöner Bonus.
:eBefehle scheinen bei meiner Windows vim-Installation nichts zu bewirken. Meine Ansicht zeigt immer noch die ^MCodes.
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=unixaber alle Zeilenenden waren ^M. Diese Lösung hat bei mir funktioniert.
:%s/\r//garbeitet stattdessen für mich.
:%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.
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:
:help fileformat
^MZeichen.
set fileformat=unixzu 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//gfunktionierte 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
:%sanstelle 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.
^MEndungen. 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 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.
BSD-Version:
dos2unix $FILENAME $FILENAME_OUT
mv $FILENAME_OUT $FILENAME
GNU-Version:
dos2unix $FILENAME
Alternativ können Sie Ihre eigenen dos2unixmit 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
\nDiese 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 badfileund sehen0x0d 0x0a"\r\n", ist das Ihr Problem.