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

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: