Forum Programmation.shell passer une variable d'un bash à sed

Posté par  .
Étiquettes : aucune
0
19
oct.
2004
Bonjour,

je lance mon script de la sorte:

./mon-script mon_fichier

Contenu de mon_fichier: (ce fichier est genere par un outil CAO et le contenu du champ ancien peut-etre different)

blabla blabla blabla TopDesignName="ancien"

et j'aimerais obtenir:
blabla blabla blabla TopDesignName="nouveau"

Mon script:

#!/bin/bash
NEW_PATTERN="nouveau"
#je met le contenu du dernier champ ($NF) de la premiere ligne dans la variable OLD_PATTERN,et j'efface les ""
OLD_PATTERN=`awk -F "=" 'NR < 2 {print $NF} $1 | tr -d '\042'`
# et je veux donc substituer OLD_PATTERN par NEW_PATTERN
cat $1 | sed "s/$OLD_PATTERN/$NEW_PATTERN/" # ne marche pas
#Par contre,si j'indique une valeur existante,j'ai bien la substitution
cat $1 | sed "s/ancien/$NEW_PATTERN/"
Donc le pb est que je ne sais pas passer $OLD_PATTERN a sed,alors que $NEW_PATTERN passe bien
Merci d'avance pour vos conseils
Philippe
  • # le shell aussi ça se débeugue

    Posté par  (site web personnel) . Évalué à 1.

    tu peux soit ajouter -x à la fin de la première ligne de ton script (#!/bin/bash -x) ou entourer une zone précise par set -x et set +x. L'option -x permet d'activer l'affichage des opération internes du shell, et +x le désactive.

    Ça te permettrait déjà de voir si tes variables sont correctement affectées ...

    ensuite, il me semble que sed s'apelle plutôt avec l'option -e pour la substitution

    chez moi, ça marche ça :
    VAR1="plop"; VAR2="clic"; echo "hohplophoho" | sed "s/$VAR1/$VAR2/"
    • [^] # Re: le shell aussi ça se débeugue

      Posté par  . Évalué à 1.

      Merci pour vos reponses,

      J'ai essaye le meme script en enlevant le tr -d '\042' apres le awk,
      et c'est ok. Ce sont les "" du champ que je recupere qui posent pb,j'ai pas encore analyse pourquoi !!!!

      Merci a tous les 2
  • # Mettre les variables shell entre simple quote

    Posté par  . Évalué à 2.

    sed "s/'$OLD_PATTERN'/'$NEW_PATTERN'/"
    Il faut juste vérifier que $OLD_PATTERN est correctement initialisé.
    • [^] # Re: Mettre les variables shell entre simple quote

      Posté par  . Évalué à 2.

      Euh .. Petite erreur de ma part, vu que tu as mis des doubles quotes pour ton sed, il faut remplacer les simples quotes de ma solution par des doubles quotes ce qui donne :
      sed "s/"$OLD_PATTERN"/"$NEW_PATTERN"/"

      Chez moi j'ai essayé en encadrant l'expression régulière de sed par des simples quotes.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.