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 Nicolas Dumoulin (site web personnel) . Évalué à 1.
Ç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 chirophil91 . Évalué à 1.
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 totof2000 . Évalué à 2.
Il faut juste vérifier que $OLD_PATTERN est correctement initialisé.
[^] # Re: Mettre les variables shell entre simple quote
Posté par totof2000 . Évalué à 2.
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.