Se corro questo codice in bash:Perché sed non sostituisce tutte le occorrenze?
echo dog dog dos | sed -r 's:dog:log:'
dà uscita:
log dog dos
Come posso farlo sostituire tutte le occorrenze di cane?
Se corro questo codice in bash:Perché sed non sostituisce tutte le occorrenze?
echo dog dog dos | sed -r 's:dog:log:'
dà uscita:
log dog dos
Come posso farlo sostituire tutte le occorrenze di cane?
si dovrebbe aggiungere il modificatore g
in modo che sed esegue un globale sostituzione del contenuto del buffer modello :
echo dog dog dos | sed -e 's:dog:log:g'
Per una documentazione fantastica su sed, controllare http://www.grymoire.com/Unix/Sed.html. Questo globale bandiera è spiegata qui: http://www.grymoire.com/Unix/Sed.html#uh-6
La documentazione ufficiale per GNU sed
è disponibile presso http://www.gnu.org/software/sed/manual/
Grazie, ha funzionato :) – niagr
Bisogna mettere un g
alla fine, si distingue per "globale":
echo dog dog dos | sed -r 's:dog:log:g'
^
sed -e dovrebbe essere usato al posto di sed -r, che non esiste. –
@DylanDaniels Secondo 'man sed' su Ubuntu, l'opzione' -r' significa "usa le espressioni regolari estese". Quindi il comando dato funziona bene, anche se non ha bisogno che funzionino le caratteristiche delle espressioni regolari estese. –
È necessario il flag 'G' per la sostituzione globale, non è necessario l'opzione' -r' neanche qui . –