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 :
un tag à substituer est donc délimité par @
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 tonton=@tonton@ tata=@tata@
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 !
Partager