Seite 1 von 1

sed frage

Verfasst: Samstag 10. Juli 2010, 15:03
von Francesco
Hallo, ich kenne mich hier nicht recht aus:

Code: Alles auswählen

sed 's/\(.*\)foo\(.*foo\)/\1bar\2/' text.txt
#replace the next-to-last case
1) was bedeutet das "replace the next-to-last case"
2 warum wird hier jedes zweite vorkommen getauscht (und nicht das erste)?

test.txt enthält

Code: Alles auswählen

foo1 foo2 foo3
Ausgabe ist:

Code: Alles auswählen

foo1 bar2 foo3
(.*) sucht bis zum ersten foo, dann müsste das erste foo eigentlich bar1 getauscht werden
Also ich würde folgende Ausgabe erwarten:

Code: Alles auswählen

bar1 foo2 foo3

Re: sed frage

Verfasst: Samstag 10. Juli 2010, 15:07
von BlackJack
@Francesco: "the next to last" heisst auf Deutsch "das vorletzte". Es wird also nicht jedes zweite ersetzt, sondern das vorletzte "foo".

Re: sed frage

Verfasst: Samstag 10. Juli 2010, 15:24
von Francesco
BlackJack hat geschrieben:@Francesco: "the next to last" heisst auf Deutsch "das vorletzte". Es wird also nicht jedes zweite ersetzt, sondern das vorletzte "foo".
Ah ja, danke einmal. Jetzt, weiß ichs (oder denke es zumindest)

Das ganz ist ja greedy, d.h. das erste .* sucht die größte Spanne. und dann noch einmal das foo, das dann das letzte ist.