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 g
modificateur 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 sed
est 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 sed
Ubuntu, l' -r
option 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.
g
indicateur pour la substitution globale, vous n'avez pas non plus besoin de l'-r
option ici.