On 2006-06-21 07:58:57 +0200, Matthias Houdek wrote: > Hallo > > Dienstag, 20. Juni 2006 20:07 - Matthias Houdek wrote: > > [Ersetzen von Dezimalpunkt durch Dezimalkomma in rein numerischen > > Feldern in folgender Struktur (z.B.) bei ein oder zwei > > Nachkommastellen: > > sd34.43|232232.22|2345.4|324234.324|2323.45|123.41| > > ] > > > > sed -r 's/(^|\|)([0-9]+)\.([0-9]{1,2}\|)/\1\2,\3/g' $file > > Dieser RegExp macht zwar das Gewünschte, auch wenn das numerische Feld > am Zeilenanfang steht. > > Allerdings erfolgt der Wechsel nicht in zwei aufeinanderfolgenden > numerischen Feldern (hier z.B. Felder 2 und 3). Ursache dafür ist, dass > der abschließende Delimiter eines Feldes mit erfasst wird|werden muss > und damit nicht mehr als Einleitung für das nächste Feld aufgenommen > wird. Damit trifft der RegExp für das nachfolgende Feld nicht mehr zu. > > Nun kann man ja diesen sed-Befehl 2 x über die Datei laufen lassen, dann > würden auch die im ersten Durchlauf nicht erfassten geändert. Oder man > verdoppelt zuvor alle Feld-Delimiter. > > Gibt es keine andere Möglichkeit?
Mit Lookaround-Zusicherungen wie sie z.B. Perl kennt: s/(?:^|(?<=\|))(\d+)\.(\d\d?\|)/\1,\2/g Hier wird eine Lookbehind-Zusicherung genutzt, um nachzusehen, ob vor den Zahlen ein | ist. Eine andere Möglichkeit wäre über eine Lookahead-Zusicherung nachzusehen, ob nach dem Punkt eine oder zwei Ziffern und ein | folgen: s/((^|\|)\d+)\.(?=\d\d?\|)/\1,/g sed kennt wowas nicht, also wirst du wohl auf Perl umsteigen müssen. Michael -- Haeufig gestellte Fragen und Antworten (FAQ): http://www.de.debian.org/debian-user-german-FAQ/ Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED] mit dem Subject "unsubscribe". Probleme? Mail an [EMAIL PROTECTED] (engl)