Si j'exécute ce code dans bash:
echo dog dog dos | sed -r 's:dog:log:'
il donne la sortie:
log dog dos
Comment puis-je le faire remplacer toutes les occurrences de chien?
Si j'exécute ce code dans bash:
echo dog dog dos | sed -r 's:dog:log:'
il donne la sortie:
log dog dos
Comment puis-je le faire remplacer toutes les occurrences de chien?
Réponses:
Vous devez ajouter le gmodificateur pour que sed effectue une substitution globale du contenu du tampon de motif:
echo dog dog dos | sed -e 's:dog:log:g'
Pour une documentation fantastique sur sed, consultez http://www.grymoire.com/Unix/Sed.html . Ce drapeau global est expliqué ici: http://www.grymoire.com/Unix/Sed.html#uh-6
La documentation officielle de GNU sedest disponible sur http://www.gnu.org/software/sed/manual/
sed -E 's,foo,bar,g'ne fait pas la chose globale. Si vous le changez, sed -E -e 's,foo,bar,g'cela fonctionne.
Il faut mettre un gà la fin, ça veut dire "global":
echo dog dog dos | sed -r 's:dog:log:g'
^
man sedUbuntu, l' -roption signifie "utiliser des expressions régulières étendues". Ainsi, la commande donnée fonctionne correctement, même si elle n'a pas besoin des fonctionnalités des expressions régulières étendues pour fonctionner.
gindicateur pour la substitution globale, vous n'avez pas non plus besoin de l'-roption ici.