2 votes

Pourquoi sed supprime-t-il le caractère dans l'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 ?

2voto

Wiktor Stribiżew Points 100073

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.com

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.

Powered by:

X