#1 Le 07/12/2017, à 15:38
- DonutMan75
[RESOLU] Utilisation de sed pour remplir un template
Bonjour à tous,
voilà j'ai un fichier texte "template" que je souhaite remplir avec des variables.. Je cherche une façon plus propre de procéder que le pipe de N sed consécutifs...
Voici un exemple de template :
$ cat template.txt
nom : :MON_NOM:
age : :MON_AGE:
taille : :MA_TAILLE:
...
J'utilise donc sed au sein d'un script, de cette façon :
$ cat template.txt | sed -re "s/:MON_NOM:/$(my_name)/" | sed -re "s/:MON_AGE:/$(my_age)/" | sed -re "s/:MA_TAILLE:/$(my_heigh)/" | ... > fichier_rempli.txt
Ca marche bien mais ce n'est pas très beau (surtout que le nombre de champ à remplacer sera à terme de l'ordre de la dizaine...).
Bref, avez-vous une idée pour enjoliver un peu ça ?
J'ai pensé à plusieurs pistes, sans trop savoir ce qui serait vraiment optimal :
1) Créer deux tableaux, pattern et valeur, et utiliser une boucle for : tentant mais il faut aussi gérer les sorties intermédiaires
2) J'ai cru comprendre qu'on pouvait passer un script à sed, plutôt que d'utiliser l'option -e : pas mal mais dans ce cas, mes variables ${my_name} etc... ne seront pas définies ??
3) Utiliser des étiquettes ? Je ne suis pas sûr que ça fonctionne bien... Quelque chose comme :
$ cat template.txt | sed << FIN
s/:MON_NOM:/$(my_name)/
s/:MON_AGE:/$(my_age)/
s/:MA_TAILLE:/$(my_heigh)/
...
FIN
4) Utiliser les étiquettes SANS sed, on aurait in fine la commande ci-dessous. J'ai testé et ça marche.. Le problème c'est que le template est incorporé dans le script... Bof si je trouve rien de mieux je resterai là dessus, je pense...
cat > fichier_rempli.txt << FIN
nom : $my_name
age : $my_age
taille : $my_heigh
...
FIN
Qu'en dites-vous ?
Merci d'avance
Donut
Dernière modification par DonutMan75 (Le 08/12/2017, à 07:19)
Hors ligne
#2 Le 07/12/2017, à 16:42
- Compte anonymisé
Re : [RESOLU] Utilisation de sed pour remplir un template
Bonjour,
cat template.txt | sed -re "s/:MON_NOM:/$(my_name)/" | sed -re "s/:MON_AGE:/$(my_age)/" | sed -re "s/:MA_TAILLE:/$(my_heigh)/" | ... > fichier_rempli.txt
=
sed -re "s/:MON_NOM:/$(my_name)/;s/:MON_AGE:/$(my_age)/;s/:MA_TAILLE:/$(my_heigh)/" template.txt > fichier_rempli.txt
le -re est aussi optionnel en l'état
les variables sont sous la forme $my_name et pas $(my_name) avec bash, là ça marchera pas
Bon il y a plus optimal comme façon de faire ... je vais y réfléchir
Dernière modification par Compte anonymisé (Le 07/12/2017, à 16:42)
#3 Le 07/12/2017, à 16:51
- pingouinux
Re : [RESOLU] Utilisation de sed pour remplir un template
Bonjour,
Voici une façon de faire :
sed -re "
s/:MON_NOM:/${my_name}/
s/:MON_AGE:/${my_age}/
s/:MA_TAILLE:/${my_heigh}/
" template.txt >fichier_rempli.txt
Tu peux générer le script précédent avec celui-ci
$ cat generation_script
printf 'sed -re "\n'
while [ "$1" ]
do
printf 's/:%s:/${%s}/\n' "$1" "$2"
shift 2
done
printf '" template.txt >fichier_rempli.txt\n'
que tu appelles ainsi
./generation_script MON_NOM my_name MON_AGE my_age MA_TAILLE my_heigh
Hors ligne
#4 Le 07/12/2017, à 17:55
- DonutMan75
Re : [RESOLU] Utilisation de sed pour remplir un template
Hello,
super merci beaucoup à vous deux !
Je vais implémenter ça.
Bonne soirée,
Donut
Hors ligne
#5 Le 07/12/2017, à 18:17
- Hizoka
Re : [RESOLU] Utilisation de sed pour remplir un template
et pourquoi ne pas réecrire un fichier via un simple echo si tu as toutes les variables ?
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#6 Le 08/12/2017, à 07:36
- DonutMan75
Re : [RESOLU] Utilisation de sed pour remplir un template
Hello Hizoka,
merci pour ta proposition,
mais au final j'ai préféré garder un template externe au script.
Bonne journée à tous
Donut
Hors ligne