Forums Neueste Beiträge
 

GNU Sed 4.21 und non-greedy matching

18/05/2011 - 12:28 von Michael Scheer | Report spam
Hallo,

langsam werde ich nach 17 Mio. Versuchen wahnsinnig, also schreibe ich
das mal hier nieder.

eingabe.log:
Tag1:Blah<br>Tag2: Blubb<br>Tag3:
Blubber<br>Zeile1:Bleh<br>Zeile2:Blu<br>Subject:Brabbel<br><br>Subject:Blubber<br>Zeile1:Bleh<br>

Ich will nun: alles ab "Tag2" bis einschließlich zum ersten "Subject:"
mit "TEST" ersetzen. Herauskommen soll:
Tag1:Blah<br>TESTBrabbel<br><br>Subject:Blubber<br>Zeile1:Bleh<br>

sed -e "s/Tag2.*Subject\:/TEST/" eingabe.log>out.txt

Das matcht bis zum hinteren "Subject:", weil Regex in sed ja greedy
ist. Ich will also vermutlich das .* eingrenzen. Nun dachte ich an:

sed -e "s/Tag2[^(Subject)]*Subject\:/TEST/" eingabe.log>out.txt

Ich habe also .* ersetzt durch [^(Subject)]* - ich verstehe
[^(Subject)]* so: eine Zeichenklasse, die NICHT "Subject" beinhaltet,
beliebig oft mal. Also beliebige Zeichen ohne "Subject", der Match
endet also am ersten "Subject".

Doch das funktioniert nicht, es matcht gar nicht.

Bitte mal um Input.

Danke :-)
Michael
 

Lesen sie die antworten

#1 Michael Scheer
18/05/2011 - 19:14 | Warnen spam
Also das mit der Zeichenklasse [^(Subject)]* klappt so nicht. Zu
funktionieren scheint
Tag2[^S]*[^u]*[^b]*[^j]*[^e]*[^c]*[^t]*Subject
matcht mir den Bereich [Tag2...Subject] auf dem 1. Subject. Über die
Korrektheit bin ich mir noch nicht sicher, aber heute ist erstmal
Schluß damit.

Ähnliche fragen