[shell] Substitution dynamique de chaines

pascal$$ Messages postés 39 Statut Membre -  
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   -
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!!
Configuration: Windows XP
Firefox 2.0.0.11

1 réponse

  1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    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