[shell] Substitution dynamique de chaines

Fermé
pascal$$ Messages postés 39 Date d'inscription dimanche 20 mai 2007 Statut Membre Dernière intervention 26 février 2009 - 3 janv. 2008 à 09:21
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 - 3 janv. 2008 à 09:30
Bonjour,
Debutant en shell, je recherche comment substituer des chaines de caracteres de manière dynamique,Example:
Si je tape echo 'un/deux/trois ' | sed 's/un /quatre/' j obtiens quatre/deux/trois jusque la ok
par contre comment faire pour que si je tape:
variable1=un
variable2=quatre

puis echo 'un/deux/trois' | sed 's/$variable1/$variable2/' j obtienne le resultat:quatre/deux/trois
Merci d avance!!
A voir également:

1 réponse

jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 896
3 janv. 2008 à 09:30
Salut,

Tout est question de quotes !

Il faut simplement que tu encadres l'expression avec "sed" par des quotes doubles afin que les variables soient interprétées par le shell :
$ variable1=un;variable2=quatre
$ echo 'un/deux/trois' | sed "s/$variable1/$variable2/"
quatre/deux/trois
ou si tu veux conserver les quotes simples autour de l'expression, à ce moment là, il faut quoter de cette façon (beaucoup moins lisible):
$ echo 'un/deux/trois' | sed 's/'"$variable1"'/'"$variable2"'/'
quatre/deux/trois
autrement dit, refermer chaque quote simple avant la variable, elle même entourée de quotes doubles, et rouvrir la quote simple juste derrière et ainsi de suite...
0