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?
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?
Należy dodać modyfikator g
tak że sed wykonuje globalnego podstawienie zawartości bufora wzorca :
echo dog dog dos | sed -e 's:dog:log:g'
Za fantastyczną dokumentację na temat sed, sprawdź http://www.grymoire.com/Unix/Sed.html. Ten globalny flaga jest wyjaśnione tutaj: http://www.grymoire.com/Unix/Sed.html#uh-6
Oficjalna dokumentacja GNU sed
jest dostępny na http://www.gnu.org/software/sed/manual/
Dziękuję, to zadziałało :) – niagr
Trzeba położyć g
na końcu, to skrót od „globalny”:
echo dog dog dos | sed -r 's:dog:log:g'
^
sed -e powinien być użyty zamiast sed -r, który nie istnieje. –
@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. –
Musisz 'G' flagę globalnego substytucji, nie trzeba Opcja' -r' tutaj albo . –