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 g
modificador 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 sed
está 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 g
no final, ele significa "global":
echo dog dog dos | sed -r 's:dog:log:g'
^
man sed
no Ubuntu, a -r
opçã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.
g
sinalizador para substituição global, você também não precisa da-r
opção aqui.