Konvertieren DOS Zeilenende auf Linux-Zeilenende in vim
Frage
Wenn ich öffnen Dateien, die ich in Windows erstellt, die Linien enden alle mit ^M
.
Wie lösche ich auf einmal diese Zeichen?
Lösung
dos2unix ist ein Kommandozeilen-Dienstprogramm, das dies tun wird, oder :%s/^M//g
wird, wenn Sie mit Ctrl - v Strg -. m zur Eingabe der ^ m, oder können Sie :set ff=unix
und vim wird es für Sie tun
Docs auf der ‚Dateiformat‘ Einstellung ist hier und das vim Wiki verfügt über ein umfassendes Seite auf Zeilenende Conversions .
Alternativ, wenn Sie Dateien hin und her viel bewegen, könnten Sie nicht, sie konvertieren wollen, sondern :set ff=dos
zu tun, so vim wird wissen, dass es eine DOS-Datei und verwenden DOS-Konventionen für Zeilenende.
Andere Tipps
die Zeilenende in der Ansicht ändern:
:e ++ff=dos
:e ++ff=mac
:e ++ff=unix
Dies kann auch als Sparbetrieb verwendet werden (: w allein wird nicht speichern Sie die Zeilenende mit auf dem Bildschirm zu sehen):
:w ++ff=dos
:w ++ff=mac
:w ++ff=unix
Und Sie können es von der Kommandozeile verwenden:
for file in *.cpp
do
vi +':w ++ff=unix' +':q' "$file"
done
ich in der Regel verwenden
:%s/\r/\r/g
, das scheint ein wenig seltsam, aber funktioniert wegen der Art, dass vim Spiele Zeilenvorschübe. Ich finde es auch leichter merken:)
Ich ziehe den folgenden Befehl verwenden:
:set fileformat=unix
Sie können auch mac
oder dos
verwenden, um jeweils die Dateien auf Macintosh- oder MS-DOS / MS-Windows-Dateikonvention zu konvertieren. Und es tut nichts, wenn die Datei bereits im richtigen Format ist.
Weitere Informationen finden Sie in der vim-Hilfe:
:help fileformat
:%s/\r+//g
In Vim, dass alle Zeilenumbrüche Streifen und lässt nur Zeilenumbrüche.
:set fileformat=unix
von DOS zu Unix konvertieren.
aus: http://vim.wikia.com/wiki/ Change_end-of-line_format_for_dos-mac-Unix
[Esc]:% s / \ r $ //
dos2unix
kann die Dateiinhalte direkt ändern.
Sie können es direkt auf die Datei verwenden, ohne die Notwendigkeit für temporäre Datei Umleitung.
dos2unix input.txt input.txt
Die oben gezeigt verwendet die angenommenen US-Tastatur. Verwenden Sie die -
437 Option, um die UK-Tastatur zu verwenden.
dos2unix -437 input.txt input.txt
Konvertieren Verzeichnis von Dateien von DOS zu Unix
Mit Befehlszeile und sed, finden Sie alle Dateien im aktuellen Verzeichnis mit der Endung „.ext“ und entfernen Sie alle ‚^ M‘
@ 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 = Strg + V + Strg + M (Geben Sie nicht nur die Cursor "^" Symbol und M)
tr -d '\15\32' < winfile.txt > unixfile.txt
(siehe: http://kb.iu.edu/data/acux.html)
Folgende Schritte können das Dateiformat für DOS zu 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
Mit dem folgenden Befehl:
:%s/^M$//g
Holen Sie sich das ^M
Typ erscheinen Strg V dann Strg M . Strg V sagt Vim das nächste Zeichen eingegeben wörtlich zu nehmen.
fand ich eine sehr einfache Art und Weise: Öffnen Sie die Datei mit nano: nano file.txt
Drücken Sie STRG + O zu speichern, aber vor dem Drücken Enter , drücken Sie: ALT + D betwen DOS und Unix / Linux-Zeilenende wechseln, oder: ALT + M betwen Mac und Unix / Linux-Zeilenende und drücken Sie dann umschalten < kbd> Enter speichern und STRG + X beenden.
:g/Ctrl-v Ctrl-m/s///
Strg M ist der Charakter \r
oder Wagenrücklauf, die DOS-Zeilenende hinzuzufügen. Strg V sagt vim eine wörtliche Strg M Zeichen in der Befehlszeile einzufügen.
als Ganzes genommen, diesen Befehl ersetzt alle \r
mit nichts, um sie von den Enden der Linien zu entfernen.
Sie können mit:
vim somefile.txt +"%s/\r/\r/g" +wq
oder dos2unix utility
.
Der Kommentar über den immer ^ M erscheinen soll, was für mich gearbeitet. Lediglich die Eingabe von „^ M“ in meinem vi hat nichts (nicht gefunden). Das STRG + V STRG + M Sequenz hat es perfekt though.
Mein Arbeits Substitution Befehl war
:%s/Ctrl-V Ctrl-M/\r/g
und es sah aus wie das auf meinem Bildschirm:
:%s/^M/\r/g
Sie können den folgenden Befehl verwenden:
:%s/^V^M//g
wo die '^' bedeutet Gebrauch STRG drücken.
unter Befehl für Neuformatierung all .sh-Datei im aktuellen Verzeichnis verwendet wird, ich es auf meinem Fedora O getestet.
for file in *.sh; do awk '{ sub("\r$", ""); print }' $file >luxubutmp; cp -f luxubutmp $file; rm -f luxubutmp ;done
In der Regel gibt es einen dos2unix
Befehl, den Sie für diese verwenden können, nur sicherstellen, dass Sie das Handbuch lesen, wie die GNU und BSD-Versionen unterscheiden, wie sie mit den Argumenten beschäftigen.
BSD-Version:
dos2unix $FILENAME $FILENAME_OUT
mv $FILENAME_OUT $FILENAME
GNU-Version:
dos2unix $FILENAME
Alternativ können Sie Ihre eigene dos2unix
mit einem der vorgeschlagenen Antworten hier, zum Beispiel erstellen:
function dos2unix(){
[ "${!}" ] && [ -f "{$1}" ] || return 1;
{ echo ':set ff=unix';
echo ':wq';
} | vim "${1}";
}
Ich wusste, dass ich das irgendwo gesehen habe. Hier ist der FreeBSD Login-Tipp:
Sie benötigen Datei alle jene ^ M Zeichen aus einer DOS entfernen? Versuchen
tr -d \\r < dosfile > newfile
-- Originally by Dru <genesis@istar.ca>
In vim, Typ:
:w !dos2unix %
Dies wird Rohr den Inhalt Ihres aktuellen Puffer an den dos2unix Befehl und die Ergebnisse über den aktuellen Inhalt schreiben. Vim fragt die Datei nach
nachladen Um direkt in Linux-Konsole ausführen:
vim file.txt +"set ff=unix" +wq
Obwohl dieses Thema ist sehr alt, ich möchte ein anderes Material von wikia setzen:
%s/\r\+$//g
, die alle Wagenrücklauf Zeichen finden füllen (ein und mehr Wiederholungen) bis zum Ende der Zeile und löschen, so dass nur \n
wird bei EOL bleiben.
Das ist mein Weg. Ich öffnete eine Datei in dos EOL und wenn ich die Datei speichern, wird in die Unix-EOL automatisch konvertieren
autocmd BufWrite * :set ff=unix
Wenn Sie eine Datei in Editor oder Notepad ++ erstellen in Windows und bringen es auf Linux und öffnen Sie sie von vim, sehen Sie ^ M am Ende jeder Zeile. So entfernen Sie diese,
Auf Ihrem Linux-Terminal-Typ
dos2unix filename.ext
Damit wird die erforderliche Magie tun.
Ich wollte neue Zeilen anstelle der ^ M. Perl zur Rettung:
perl -pi.bak -e 's/\x0d/\n/g' excel_created.txt
oder auf stdout zu schreiben:
perl -p -e 's/\x0d/\n/g' < excel_created.txt