IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

sed et substitution de variable


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Août 2013
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Août 2013
    Messages : 23
    Par défaut sed et substitution de variable
    Bonjour,

    Je souhaite dans un script shell bash faire une substitution en utilisant sed et des variables.
    Voici ma commande dans mon bash :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     sed  's/'"$name_acr"'/'"$DB"'/' $PATH2/$var/$FILE  /$DB.$SQESX2.$var.$SUFFIX_FINAL
    Après avoir lancé mon script, la substitution ne s'est pas faite. Malgré apparence, il n'y a pas d'espace entre le chemin et le nom du fichier.
    Merci pour votre aide.

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Par défaut
    Salut,

    Citation Envoyé par bnleg Voir le message
    Après avoir lancé mon script, la substitution ne s'est pas faite.
    La substitution ne s'est pas faite, où ça ? À l'écran ou dans le fichier ?


    PS. Un aperçu (même partiel) du fichier ainsi que du contenu des variables n'aurait pas été un luxe

  3. #3
    Membre averti
    Inscrit en
    Août 2013
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Août 2013
    Messages : 23
    Par défaut
    La substitution ne s'est pas faite dans le fichier.
    $name_acr="lyon"
    $DB="mysql_lyn"

    De fait, je dois substituer plusieurs variable, mais sur une déjà, cela ne fonctionne pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if [ $OPT1 $PATH2/$var/$FILE2/$PREFIXE.$ip_.142.$SUFFIX_FINAL ] ; then
       mv $PATH2/$var/$FILE2/$PREFIXE.$ip_.142.$SUFFIX_FINAL  $PATH2/$var/$FILE2/$DB.$SQESX2.$var.$SUFFIX_FINAL
    #    sed "s/'"$name_acr"''"$y"'/'"$DB"'.'"$SQESX2"'.'"$var"'/"  $PATH2/$var/$FILE2/$DB.$SQESX2.$var.$SUFFIX_FINAL
         sed  's/'"${name_acr}"'/'"${DB}"'/p' $PATH2/$var/$FILE2/$DB.$SQESX2.$var.$SUFFIX_FINAL
    fi

  4. #4
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Par défaut
    Ben pour que ça marche il faut soit rediriger la sortie vers un fichier temporaire puis renommer ledit fichier (mv fic-temp fic), soit se servir de l'option -i de sed si sa version le permet.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    sed 's/motif/blabla/' fichier > fich_tmp && mv fich_tmp fichier
    ou
    sed -i.bak 's/motif/blabla/' fichier

  5. #5
    Membre averti
    Inscrit en
    Août 2013
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Août 2013
    Messages : 23
    Par défaut
    Pour une variable, effectivement cela fonctionne avec l'option -i mais pour un ensemble de variable, la substitution ne se fait pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -i "s/'"$name_acr$y"'/'"$DB.$SQESX2.$var"'/p"  $PATH2/$var/$FILE2/$DB.$SQESX2.$var.$SUFFIX_FINAL


    Sur une variable cela fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed  -i 's/'"$name_acr"''/'"$DB"'/' $PATH2/$var/$FILE2/$DB.$SQESX2.$var.$SUFFIX_FINAL

  6. #6
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Par défaut
    Citation Envoyé par bnleg Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -i "s/'"$name_acr$y"'/'"$DB.$SQESX2.$var"'/p"  $PATH2/$var/$FILE2/$DB.$SQESX2.$var.$SUFFIX_FINAL
    Si tu mets d'entrée des quotes doubles autour de la syntaxe, pas la peine de faire tout ce tralala Au passage le flag "p" ne sert à rien s'il n'est pas accompagné de l'option "-n"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -i "s/$name_acr$y/$DB.$SQESX2.$var/"  $PATH2/$var/$FILE2/$DB.$SQESX2.$var.$SUFFIX_FINAL
    Après pour ton histoire de variables multiples, par convention et pour éviter des déboires, il vaut mieux entourer ses variables avec des accolades ${var1}${var2}


    Sinon, chez moi je n'ai pas de problèmes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $ A="jac";B="ques"
     
    $ C="Du";D="pond"
     
    $ echo "Je m'appelle jacques..." | sed 's/'"${A}${B}"'/'"${C}${D}"'/'
    Je m'appelle Dupond...

  7. #7
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Par défaut
    Citation Envoyé par bnleg Voir le message
    Malgré apparence, il n'y a pas d'espace entre le chemin et le nom du fichier.
    Il y a deux noms de (à priori) fichiers passés en paramètres à sed, c'est voulu ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. M4 : Substitution de variable contenu dans un mot
    Par nicolaskarp dans le forum Applications et environnements graphiques
    Réponses: 1
    Dernier message: 21/07/2009, 14h08
  2. Substitution de variables
    Par *alexandre* dans le forum Maven
    Réponses: 1
    Dernier message: 02/07/2009, 08h27
  3. Réponses: 4
    Dernier message: 14/02/2008, 22h11
  4. sed et regexp avec variables
    Par vpovpo dans le forum Shell et commandes GNU
    Réponses: 0
    Dernier message: 29/12/2007, 20h52
  5. Substitution de variable
    Par hugo123 dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 02/11/2006, 09h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo