[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: suche regexp



Hallo Matthias Houdek, hallo auch an alle anderen

Dienstag, 20. Juni 2006 16:56 - Matthias Houdek wrote:
> Hallo Roland M. Kruggel, hallo auch an alle anderen
>
> Dienstag, 20. Juni 2006 16:27 - Roland M. Kruggel wrote:
> > Am Dienstag, 20. Juni 2006 16:11 schrieb Thorsten Haude:
> > > Moin,
> > >
> > > * Roland M. Kruggel wrote (2006-06-20 14:28):
> > > >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.
> > >
> > > Also:
> > > Zeilenanfang oder |             (^||)
> > > dann beliebig viele Ziffern     \d*
> > > dann ein Punkt                  \.
> > > dann ein oder zwei Ziffern      \d{1,2}
> > > dann ein |                      |
> >
> > Verstanden
> >
> > > Ergebnis:
> > > /(^|\|)/\d*\.\d{1,2}|/
> >
> >          ^
> > ist dann nicht der zuviel?
> >
> > > Wenn die Zahlen wie in Deutschland üblich immer eine
> > > Vorkommastelle haben sollen, dann mußt Du den * durch ein +
> > > ersetzen.
> > >
> > > Wie Du den Punkt ersetzt hängt von der Umgebung und Deinen
> > > Vorlieben ab. In Perl zB. so ungefähr:
> > > s/((^|\|)/\d*)\.(\d{1,2}|)/\1,\2/
> >
> > Perl hört sich gut an.
> > Wäre es unverschämt von mir, wenn ich um einen perlaufruf bitten
> > würde. Dann könnte ich mir ein bash-script bauen das die ganzen 58
> > File nacheinander abklappert.
>
> Wenn du es mit einem Bash-Script machen willst, dann nimm doch sed.
>
> oldfile = "<filename1>"
> newfile = "<filename2>"
> sed 's/(^|\|)(\d+)\.(\d{1,2}\|)/\1\2,\3/g' $oldfile > $newfile

*Argh* - bei sed sind es mal wieder Basic-RegExp, also immer schön ein 
Backslash vor die Klammern und das Oder-Zeichen "|".

sed 's/\(^\||\)\([0-9]*\)\.\([0-9]\{1,2\}|\)/\1\2,\3/g' $oldfile > 
$newfile

> Das kannst du dir jetzt noch schön in eine Schleife einbasteln ;-)
>
> Und testen! Weil: Wie immer ohne Gewähr *g*

Hab ich gerade getestet, sollte klappen. Zumindest, solange auch das 
letzte Datenfeld mit einem "|" abgeschlossen wird (in deiner ersten 
Mail stand es so).

Ansonsten sollte das hier klappen (ist ergänzt um das Zeilenende als 
möglichen Feldabschluss):

sed 's/\(^\||\)\([0-9]*\)\.\([0-9]\{1,2\}\)\(|\|$\)/\1\2,\3\4/g' 
$oldfile > $newfile

(alles in eine Zeile)

-- 
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: