Se eu executar este código no bash:
echo dog dog dos | sed -r 's:dog:log:'
dá saída:
log dog dos
Como posso fazer com que ele substitua todas as ocorrências de cão?
Se eu executar este código no bash:
echo dog dog dos | sed -r 's:dog:log:'
dá saída:
log dog dos
Como posso fazer com que ele substitua todas as ocorrências de cão?
Respostas:
Você deve adicionar o gmodificador para que o sed execute uma substituição global do conteúdo do buffer de padrão:
echo dog dog dos | sed -e 's:dog:log:g'
Para obter uma documentação fantástica sobre o sed, visite http://www.grymoire.com/Unix/Sed.html . Este sinalizador global é explicado aqui: http://www.grymoire.com/Unix/Sed.html#uh-6
A documentação oficial do GNU sedestá disponível em http://www.gnu.org/software/sed/manual/
sed -E 's,foo,bar,g'não faz a coisa global. Se você mudar para sed -E -e 's,foo,bar,g'ele funciona.
Você tem que colocar um gno final, ele significa "global":
echo dog dog dos | sed -r 's:dog:log:g'
^
man sedno Ubuntu, a -ropção significa "usar expressões regulares estendidas". Portanto, o comando fornecido funciona bem, embora não precise dos recursos de expressões regulares estendidas para funcionar.
gsinalizador para substituição global, você também não precisa da-ropção aqui.