OVH Cloud OVH Cloud

[sed] underscore ?

2 réponses
Avatar
Christophe Gaubert
Bonsoir,

Mm, je tombe sur un truc bizarre. Si c'est trivial, merci de ne pas
taper trop fort ;)

Voilà un exemple de script :
--------------8<-----------------------------
#!/bin/bash

pattern=Toto
chaine="_Toto_"

echo "$chaine" | sed "s/_Toto_/Tutu/"
echo "$chaine" | sed "s/_$pattern_/Tutu/"
-------------8<-------------------------------

Avec lequel j'obtiens :
Tutu
TutuToto_
Je suis donc obligé de protéger les underscores dans le 2ieme sed.
Est-ce que quelqu'un peut m'expliquer ça ? Je ne vois nulle part mention
du caractère "_" comme étant spécial.

)> bash --version
GNU bash, version 3.00.16(2)-release (i586-mandrake-linux-gnu)
)> sed --version
GNU sed version 4.1.4

Merci d'avance !
christophe


--
Christophe Gaubert
http://perso.wanadoo.fr/christophe.gaubert
Mail posté depuis un système libre GNU/Linux

2 réponses

Avatar
Pascal Bourguignon
Christophe Gaubert writes:
echo "$chaine" | sed "s/_$pattern_/Tutu/"


C'est analysé par le *shell* comme:

echo "$chaine" | sed "s/_$pattern_/Tutu/"
... " s/_ $pattern_ /Tutu/ "

- --- --------- ------ -
" str varref str "
------------------------

Je ne vois nulle part mention du caractère "_" comme étant spécial.


Justement! Comme _ n'est pas spécial, mais est considéré comme une
lettre, on peut l'utiliser dans les noms de variable.

man bash

Utiliser: ${nom_variable}
partout au lieu de: $nom_variable
pour éviter ce genre de problème.

--
__Pascal Bourguignon__ http://www.informatimago.com/

The world will now reboot. don't bother saving your artefacts.

Avatar
Christophe Gaubert
Justement! Comme _ n'est pas spécial, mais est considéré comme une
lettre, on peut l'utiliser dans les noms de variable.


Oups, mais où avais-je la tête... Merci !


Utiliser: ${nom_variable}
partout au lieu de: $nom_variable
pour éviter ce genre de problème.



Bonne idée.


--
Christophe Gaubert
http://perso.wanadoo.fr/christophe.gaubert
Mail posté depuis un système libre GNU/Linux