Re: Sed Verständnisproblem
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
Reply to: