Jeśli uruchomię ten kod w bash:
echo dog dog dos | sed -r 's:dog:log:'
daje wynik:
log dog dos
Jak mogę zastąpić wszystkie wystąpienia psa?
Jeśli uruchomię ten kod w bash:
echo dog dog dos | sed -r 's:dog:log:'
daje wynik:
log dog dos
Jak mogę zastąpić wszystkie wystąpienia psa?
Odpowiedzi:
Powinieneś dodać g
modyfikator, aby sed wykonywał globalne podstawienie zawartości bufora wzorca:
echo dog dog dos | sed -e 's:dog:log:g'
Fantastyczną dokumentację na temat seda znajdziesz pod adresem http://www.grymoire.com/Unix/Sed.html . Ta globalna flaga została wyjaśniona tutaj: http://www.grymoire.com/Unix/Sed.html#uh-6
Oficjalna dokumentacja programu GNU sed
jest dostępna pod adresem http://www.gnu.org/software/sed/manual/
sed -E 's,foo,bar,g'
nie robi rzeczy globalnej. Jeśli to zmienisz, sed -E -e 's,foo,bar,g'
to działa.
Na g
końcu trzeba umieścić „globalny”:
echo dog dog dos | sed -r 's:dog:log:g'
^
man sed
Ubuntu -r
opcja oznacza „użyj rozszerzonych wyrażeń regularnych”. Zatem podane polecenie działa dobrze, chociaż nie potrzebuje do działania funkcji rozszerzonych wyrażeń regularnych.
g
flagi do globalnego zastępowania, tutaj też nie potrzebujesz tej-r
opcji.