sed frage

Alles, was nicht direkt mit Python-Problemen zu tun hat. Dies ist auch der perfekte Platz für Jobangebote.
Antworten
Francesco
User
Beiträge: 824
Registriert: Mittwoch 1. Dezember 2004, 12:35
Wohnort: Upper Austria

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
BlackJack

@Francesco: "the next to last" heisst auf Deutsch "das vorletzte". Es wird also nicht jedes zweite ersetzt, sondern das vorletzte "foo".
Francesco
User
Beiträge: 824
Registriert: Mittwoch 1. Dezember 2004, 12:35
Wohnort: Upper Austria

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.
Antworten