Wie entferne ich Strg-M aus Dateien, in denen dos2unix, perl, tr und sed nicht vorhanden sind?

9

Angenommen , Sie arbeiten an einem sehr alten Unix - Server , auf dem dos2unix, perl, tr, und sedsind nicht vorhanden. Wie können Sie Dateien vom DOS- in das Unix- Format konvertieren?

Hemant
quelle
sed ist erlaubt?
Elmarco
@elmarco: nein :(
Hemant
9
Wie alt muss ein Unix-Server sein, um nicht zu haben trund sed? sedist alt ........ iirc,
Xenoterracide
1
Wäre exoder edwäre es auf einem solchen System verfügbar? Ich würde es nicht Unix nennen, wenn es kein troder gibt sed.
MattBianco
3
Nein sed? Ja wirklich!? Was ist das System aus Interesse? Wie Gilles und MattBianco betonen, hätte es wahrscheinlich immer noch edmindestens.
Mikel

Antworten:

12

Ich denke, Sie beziehen sich auf das Entfernen des Caret-M am Ende der Zeilen. Sie können dazu in vi suchen und ersetzen.

In vi mache ich normalerweise: (wobei "^" STRG darstellt):

:%s/^V^M//g

Was auf dem Bildschirm angezeigt wird als:

:%s/^M//g
jjclarkson
quelle
danke das hat funktioniert :). Ich denke, es ist eine sehr tragbare Lösung.
Hemant
4
Sie können sed auch verwenden, um dasselbe zu tun, ohne die Datei vimieren zu müssen: sed -e '% s / ^ V ^ M // g' Dateiname Dies wird auch auf dem Bildschirm als sed e '% s / ^ angezeigt M // g 'Dateiname Wenn Sie ihn in vim suchen / ersetzen können, ist der Befehl in sed im Allgemeinen praktisch der gleiche.
gabe.
2
@gabe: die sed lösung ist eigentlich noch portabler +1 :)
wzzrd
@wzzrd sedund viwerden beide von POSIX angegeben , und dieser viBefehl verwendet keine Vim-Erweiterungen.
Wildcard
@jjclarkson was bedeutet ^Vund '^ M'?
Kokedude
6

Ein Server ohne troder sedmüsste wirklich alt sein oder einige grundlegende Befehle fehlen. Hoffentlich edist da; es existierte in der Unix-Erstausgabe .

ed /path/to/file
1,$s/^V^M$//
w
q

wobei ^V^Mmittels Eingabe Ctrl+ Vdann Ctrl+ M(Eingabe eine wörtliche Zeilenvorschub). Wenn Sie wissen, dass alle Zeilen mit CR LF enden, können Sie 1,$s/.$//stattdessen verwenden (entfernen Sie wahllos das letzte Zeichen in jeder Zeile).

Gilles 'SO - hör auf böse zu sein'
quelle