2013-04-06 7 views
75

Jeśli uruchomić ten kod w bash:Dlaczego sed nie zastępuje wszystkich wystąpień?

echo dog dog dos | sed -r 's:dog:log:' 

daje wyjście:

log dog dos 

Jak mogę uczynić go zastąpić wszystkie wystąpienia psa?

+2

Musisz 'G' flagę globalnego substytucji, nie trzeba Opcja' -r' tutaj albo . –

Odpowiedz

18

Trzeba położyć g na końcu, to skrót od „globalny”:

echo dog dog dos | sed -r 's:dog:log:g' 
            ^
+1

sed -e powinien być użyty zamiast sed -r, który nie istnieje. –

+0

@DylanDaniels Zgodnie z 'man sed' na Ubuntu, opcja' -r' oznacza "użyj rozszerzonych wyrażeń regularnych". Tak więc podane polecenie działa dobrze, chociaż nie potrzebuje funkcji rozszerzonych wyrażeń regularnych do działania. –

Powiązane problemy