Frage

Wenn ich öffnen Dateien, die ich in Windows erstellt, die Linien enden alle mit ^M.
Wie lösche ich auf einmal diese Zeichen?

War es hilfreich?

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.

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top