Re: suche regexp
Hallo Michael Ott, hallo auch an alle anderen
Dienstag, 20. Juni 2006 14:51 - Michael Ott wrote:
> Hallo Roland!
>
> > ich brauche mal die spezialisten für regexp, sed, awk oder
> > ähnliches.
> >
> > Folgendes Problem tritt bei einer Konvertierung einer Datenbank
> > auf. Es gibt folgende Datensätze ind dieser und ähnlicher Form.
> > Delimiter ist immer '|'
> >
> > --->
> > 30102136030.0|20|30102|silo 22.0|136|30|1|
> > + -
> > GH-Schale 7086.00 782|10.0|7421|0|stk|33,83|0,00|
> > -
> > 0,00|0.0|33,83|2.0|26.03.2001|1.0|30102|121|1|
> > + + - - +
> > kroeger|2001-03-26 15:55:22|102|||1|0|0|
> > ---<
> >
> > Ich muss jetzt in einigen Felder den Punkt durch ein Komma
> > ersetzen. Eigentlich trivial wenn da nicht das Datum und das
> > Textfeld drin wäre. Dort müssen die Punkte bleiben.
> >
> > Gemeinsamkeiten der Decimalfelder:
> > * nur zahlen
> > * beliebige Vorkomma-Stellen
> > * eine oder zwei Nachkommastellen
> > * am ende immer ein '|'
> > * immer ein Punkt als Dezimalzeichen
>
> vim:
> :%s/\(\d\+\)\.\(\(\d\|\d\d\)|\)/\1,\2/g
auf gut Deutsch:
tausche (mind. 1 Ziffer).(Ziffer od. 2 Ziffern und "|") gegen (Inhalt
der 1. Klammer),(Inhalt der 2. Klammer) - und das überall
Das träfe auch auf "silo 22.0" zu. Außerdem wäre IMHO für die 2. Klammer
(die Nachkommastellen) folgendes einfacher: (\d{1,2}\|)
Folgendes sollte es aber treffen (ungetestet, ggf. die Syntax je nach
verwendetem Dialekt anpassen, z.B. Klammern "escapen" wie oben):
s/((^|\|)\d+).(\d{1,2}\|)/\1,\3/g
Meiner Meinung nach sollte hier nach dem Komma der Inhalt der 3. Klammer
kommen (\3), denn die 2. Klammer enthält ja den Zeilenanfang oder den
vorhergehenden "|".
hth
--
Gruß
MaxX
Bitte beachten: Diese Mailadresse nimmt nur Listenmails entgegen.
Für PM bitte den Empfänger gegen den Namen in der Sig tauschen.
Reply to: