orm@doc-tcpip.org

Erstellt: Februar 2001 - Letzte Modifikation: Januar 2020

[ Main | Local ]


Wie entferne ich die vielen ^M aus einem Textfile?


Man geht in den Colon Mode und tippt folgendes:
g/CTRL V M/s///g
==> CTRL V M heisst: CTRL gedrückt halten und dann v m....
(also CTRL V ist das Dächlein)

Das ganze kommt meist daher: das File wurde von einem DOS Rechner übertragen. Und zwar in ASCII. ^M ist CR, Carriage Return, in hex OD. Normal ist OA für ein line feed. DOS macht daraus OAOD.

Unix macht nur "LF" (x0A), DOS macht LF und CR. Der normale vi zeigt das, vim zeigt es nicht. vim geht davon aus, das LF/CR halt ein DOS File return Charakter ist, und es ist zufrieden.

Kann man einstellen im VIM: set ffs=unix
Das muss aber in das .vimrc, oder man startet den vi im binary mode, "-b".
:e ++ff=unix
:set binary

Solche Steuerzeichen kann man mit dem vi sehen:
set list
==> CTRL I ist ein Tab, $ ist ein Line Feed.

Wie immer gibt es viele Wege:

Mit dem vi:

:%s/^V^M//
oder
:%!col -bx

Zeilenvorschub-Zeichen können in Suchbefehlen mit regulären Ausdrücken angegeben werden:
:%s/\%0d\%0a/\%0a/
Wechsel eine Datei im DOS Format ins Unix Format.
oder mit sed, dem Stream Editor:

sed -e "s/^V^M//" filename > output filename

Das ist noch nicht alles:

cat filename1 | tr -d "^V^M" > newfile

Noch mehr:
col < infile > outfile (Nie den gleichen Namen, sonst Daten weg..)

Und zu guter Letzt:

perl -pi -e "s:^V^M::g" filenames
perl -i -p -e 's/\r$//;' filename == fischt alle ^M (CR Character (x0D)


[ Main | Local ]

[ Allgemein | UNIX | AIX | TCP-IP | TCP | ROUTING | DNS | NTP | NFS | FreeBSD | Linux | RPi | SMTP | Tracing | GPS | LW ]

Copyright 2001-2021 by Orm Hager - Es gilt die GPL
Feedback bitte an: Orm Hager (orm@doc-tcpip.org )