Bonjour,

J'essaie de faire un code qui permet de remplacer dans un fichier output un ensemble de TAGS dont la correspondance se trouvent dans un fichier de config.

Le fichier input se présente comme suit :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
tonton=@tonton@
tata=@tata@
un tag à substituer est donc délimité par @


Le fichier de config qui sert à la substitution
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
tonton=Daniel
tata=Charlotte


Mon code :


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/bin/ksh
 
echo -e "tonton=@tonton@\ntata=@tata@" > input
cp input output
echo -e "tonton=Daniel&Henry\ntata=Charlotte" > config
 
 
while IFS='=' read -r key value
do 
	key='@'$key'@'
	value="`echo \"$value\" | sed -e 's/[\~&]/\\&/g'`" # on echappe les caractères \ ~ &
        echo "substituer $key par $value"
	sed -i -e "s~$key~$value~g" output
done < config
 
echo '-- resultat --'	
cat output

Ca fonctionne...
... excepté si la valeur qui va venir en remplacement est composée du caractère &, ce qui est possible dans mon cas.
J'essaie de l'échapper mais rien à faire.

S'il existe un équivalent Perl qui ignore cette histoire de caractère je suis preneur.
Merci pour votre aide !