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 messageReceived on Wed 07 Jan 2004 - 20:32:12 CET