Se eseguo questo codice in bash:
echo dog dog dos | sed -r 's:dog:log:'
dà output:
log dog dos
Come posso fare in modo che sostituisca tutte le occorrenze del cane?
Se eseguo questo codice in bash:
echo dog dog dos | sed -r 's:dog:log:'
dà output:
log dog dos
Come posso fare in modo che sostituisca tutte le occorrenze del cane?
Risposte:
Dovresti aggiungere il gmodificatore in modo che sed esegua una sostituzione globale del contenuto del buffer del pattern:
echo dog dog dos | sed -e 's:dog:log:g'
Per una fantastica documentazione su sed, controlla http://www.grymoire.com/Unix/Sed.html . Questo flag globale è spiegato qui: http://www.grymoire.com/Unix/Sed.html#uh-6
La documentazione ufficiale per GNU sedè disponibile su http://www.gnu.org/software/sed/manual/
sed -E 's,foo,bar,g'non fa la cosa globale. Se lo cambi in sed -E -e 's,foo,bar,g'funziona.
Devi mettere un galla fine, sta per "globale":
echo dog dog dos | sed -r 's:dog:log:g'
^
man sedUbuntu, l' -ropzione significa "usa espressioni regolari estese". Quindi il comando fornito funziona bene, anche se non necessita delle funzionalità delle espressioni regolari estese per funzionare.
gbandiera per la sostituzione globale, non hai nemmeno bisogno-rdell'opzione qui.