a=a
b=ab
c=''
d=''
echo ac | sed "s/$a/$b/;"
abc
echo ac | sed "s/$a/$b/; s/$c/$d/"
bc
Pourquoi sed supprime-t-il le caractère "a" dans le dernier exemple ?
a=a
b=ab
c=''
d=''
echo ac | sed "s/$a/$b/;"
abc
echo ac | sed "s/$a/$b/; s/$c/$d/"
bc
Pourquoi sed supprime-t-il le caractère "a" dans le dernier exemple ?
Cela se produit parce que le $c
est une chaîne vide, et lorsque sed
est transmis à l'élément suivant s
avec un motif vide, c'est le précédent qui est utilisé, dans ce cas, $a
qui est a
.
Ainsi,
echo ac | \
sed "s/$a/$b/; s/$c/$d/"
# a ab a
Ici,
a
est remplacé par ab
d'abord avec s/a/ab/
( ac
se transforme en abc
)a
est supprimée avec s/a//
( abc
est transformé en bc
).Voir la documentation, le Expressions régulières dans sed section :
Si un RE est vide (c'est-à-dire qu'aucun motif n'est spécifié) sédimentaire se comporte comme si le dernier RE utilisé dans la dernière commande appliquée (soit comme adresse, soit comme partie d'une commande de substitution) était spécifié.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.