it-swarm.com.de

entferne ^ M Zeichen aus der Datei mit sed

Ich habe diese Zeile in einer Datei:

ULNET-PA,client_sgcib,broker_keplersecurities
,KEPLER

Ich versuche, das ^ M-Zeichen (Wagenrücklauf) loszuwerden, also habe ich Folgendes verwendet:

sed 's/^M//g'

Dies entfernt jedoch alles nach ^ M:

[[email protected] tmp]# vi test
ULNET-PA,client_sgcib,broker_keplersecurities^M,KEPLER

[[email protected] tmp]# sed 's/^M//g' test
ULNET-PA,client_sgcib,broker_keplersecurities

Was ich erhalten möchte, ist:

[[email protected] tmp]# vi test
ULNET-PA,client_sgcib,broker_keplersecurities,KEPLER
27
SoSed

Verwenden Sie tr:

tr -d '^M' < inputfile

(Notiere dass der ^M Zeichen können mit eingegeben werden Ctrl+VCtrl+M)


BEARBEITEN: Wie vorgeschlagen von Glenn Jackman , wenn Sie bash verwenden, können Sie auch sagen:

tr -d $'\r' < inputfile
56
devnull

immer noch die gleiche Zeile:

sed -i 's/^M//g' file

wenn Sie den Befehl eingeben, für ^M du tippst Ctrl+VCtrl+M

eigentlich, wenn du die datei schon in vim geöffnet hast, kannst du einfach in vim machen:

:%s/^M//g

gleich, ^M du tippst Ctrl-V Ctrl-M

14
Kent

Sie können einfach dos2unix verwenden, das in den meisten Unix/Linux-Systemen verfügbar ist. Ich fand jedoch den folgenden sed-Befehl besser, da er ^ M entfernte, wo dos2unix nicht konnte:

sed 's/\r//g' < input.txt >  output.txt

Ich hoffe, das hilft.

Hinweis: ^ M ist tatsächlich ein Wagenrücklaufzeichen, das im Code als\r dargestellt wird.

sed 's/\r\n/\n/g' < input.txt >  output.txt

\ R wird nicht entfernt, wenn nicht unmittelbar danach\n folgt, und beide werden durch nur\n ersetzt. Dies schlägt bei bestimmten Dateitypen fehl, z. B. bei einem, mit dem ich gerade getestet habe.

alias dos2unix="sed -i -e 's/'\"\$(printf '\015')\"'//g' "

Verwendung:

dos2unix file
6
ling

Wenn Perl eine Option ist:

Perl -i -pe 's/\r\n$/\n/g' file

-i erstellt eine .bak-Version der Eingabedatei
\r = Wagenrücklauf
\n = Zeilenvorschub
$ = Zeilenende
s/foo/bar/g = global "foo" durch "bar" ersetzen

3
Chris Koknat

Ich bin einverstanden mit @ twalberg (siehe akzeptierte Antwortkommentare oben), dos2unix unter Mac OSX behandelt dies unter Angabe von man dos2unix:

Verwenden Sie zum Ausführen im Mac-Modus die Befehlszeilenoption "-c mac" oder die Befehle "mac2unix" oder "unix2mac".

Ich entschied mich für 'mac2unix', das meine weniger-cmd-sichtbaren '^ M'-Einträge entfernte, die durch eine Apple=' Messages'-Übertragung eines Bash-Skripts zwischen 2 Yosemite (OSX 10.10 ) Macs!

Ich habe 'dos2unix' trivial unter Mac OS X mit dem bekannten Home brew - Paketinstaller installiert. Ich kann es nur empfehlen und es ist Begleiterkommando Cask .

1
Big Rich

In awk:

sub(/\r/,"")

Wenn es am Ende der Aufzeichnung ist, sollte sub(/\r/,"",$NF) ausreichen. Sie müssen nicht den gesamten Datensatz scannen.

1
James Brown