Zeichen nur ab dem zweiten Vorkommen ersetzen

From: Patrick Hess <patrick-hess(at)freenet.de>
Date: Wed, 7 Jan 2004 20:30:06 +0100

Tag,

ich beschäftige mich gerade mit einer Datei, die im Prinzip
folgenden Aufbau hat:

        Feld1=Feld2
        Feld1=Feld2=Feld3=Feld4
        Feld1=Feld2=Feld3
        Feld1=Feld2

Die Gleichheitszeichen sind in diesem Fall Feldtrenner, also etwa
wie der Doppelpunkt in /etc/passwd. Nun will ich aber die Felder 2,
3 und 4 (und wie viele möglicherweise noch in einer Zeile stehen
können) zu einem Feld zusammenfassen. Dazu möchte ich das
Gleichzeitszeichen mit ", " ersetzen. Die Datei soll hinterher also
wie folgt aussehen:

        Feld1=Feld2
        Feld1=Feld2, Feld3, Feld4
        Feld1=Feld2, Feld3
        Feld1=Feld2

Es sollen also alle Gleichheitszeichen *außer* dem ersten ersetzt
werden, so daß nur noch zwei durch Gleichheitszeichen getrennte
Felder in einer Zeile stehen.

Nun habe ich unter anderem mit folgendem sed-Befehl experimentiert:

        cat TEST | sed -e 's/=/, /2' > TEST.NEW \
        && mv TEST.NEW TEST

Damit wird schon mal das zweite Gleichheitszeichen ersetzt. Nun muß
ich diesen Aufruf aber mehrmals durchführen, um auch die restlichen
eventuell auf einer Zeile auftretenden Gleichsheitszeichen zu
ersetzen. Da ich nicht wissen kann, wie viele Gleichheitszeichen
maximal auf einer Zeile auftreten können, hieße das im
ungünstigsten Falle:

        declare -i i=0
        while [ $i -lt 1000]
        do
                cat TEST | sed -e 's/=/, /2' > TEST.NEW \
                && mv TEST.NEW TEST
                i=$i+1
        done

Und dann kann ich mir immer noch nicht sicher sein, da eventuell
2.000 Gleichheitszeichen in einer Zeile stehen. Die Datei hat etwa
130.000 Zeilen, schwierig, die alle nachzukontrollieren :-(

Experimente wie etwa
        s/=/, /!1
oder zumindest, wenn auch immer noch nicht ganz optimal,
        s/=/, /1-10000
waren leider nicht erfolgreich.

Hat irgendjemand von euch eine Idee, wie man das Problem angeht?

Dank und Gruß,
Patrick

-- 
Scanner unter FreeBSD:   
http://phess.de.vu/FreeBSD-Scanner/FreeBSD-Scanner.html
To Unsubscribe: send mail to majordomo.FreeBSD.org
with "unsubscribe de-bsd-questions" in the body of the message
Received on Wed 07 Jan 2004 - 20:32:12 CET

search this site