hallo Frank, Super, vielen Dank. Ich frag zur Sicherheit nochmal nach, s.u. On Friday 09 September 2005 13:40, Frank Dietrich wrote: > Hallo Gebhard, > > > > [...] > > Angenommen Du sollst in einem Text "alle F O O B A R und FOOBAR in > Foobar wandeln. > Dann könnte man es in Pseudocode so lösen (dient nur als Beispiel, > und ist deshalb nur auf diesen einen Fall zugeschnitten): > - zuerst alle einzelnen Leerzeichen zwischen zwei Großbuchstaben > löschen > - dann alle FOOBAR durch Foobar ersetzen > > # alle einzelnen Leerzeichen zwischen zwei Großbuchstaben löschen > echo "F O O B A R FOOBAR" | sed -e 's/\([A-Z]\) \([A-Z]\)/\1\2/g' > Das geht deswegen schief, weil sich die Zeile während der > Bearbeitung verkürzt. > > Intern sieht das vereinfach so aus: > F O O B A R FOOBAR > > |-- sed merkt sich diese Postion > > FO O B A R FOOBAR > > |-| das ist das nächste gefundene Pattern > | > |-- sed merkt sich diese Postion
Das heißt, sed steht beim Leerzeichen zwischen FO O und schnappt sich das nächste pattern, das durch die Zeilenverkürzung erst O B ist? Also letztlich als Regel: Dank der bei jeder Ersetzung entstehenden Zeilenverkürzung entgeht ihm jedes Zweite? und Perl hat eine andere regex-Maschine, die dieses Problem nicht hat? > > FO OB A R FOOBAR > > |-| das ist das nächste gefundene Pattern > > FO OB AR FOOBAR > und das kommt als Ergebnis raus > > [...] Rest klar > > Hoffe noch ein wenig Licht ins Dunkel gebracht zu haben. Ja, ich dank dir sehr > Frank Gebhard

