Je dois régulièrement créer plus de 100 fichiers texte à partir de modèles.
J'utilise actuellement un script shell trop compliqué. Je pense qu'il existe une façon plus intelligente de gérer cela, mais je ne sais pas comment.
J'ai une "base de données":
# outputfile template data1 data2 data3
first.txt $template_main $text1 abcd 1234
second.txt $template_main $text2 efgh 5678
third.txt $template_other $text1 ij 90
Et un fichier de configuration:
template_main=main.txt
template_other=other.txt
text1=whatever
text2=blah
Les modèles sont des fichiers texte avec des espaces réservés comme %% data2 %% (le formulaire d'espace réservé peut être modifié).
Quelqu'un connaît-il un outil pour automatiser cela mieux qu'avec un script shell compliqué?
shell-script
text-processing
Gregory MOUSSAT
la source
la source
Réponses:
Il existe probablement des milliers de ces langages de modèles et logiciels associés. Un exemple populaire est ERB , qui fait partie de Ruby vanille. Après avoir installé Ruby, vous pouvez démarrer
irb
ou un éditeur et coller simplement l'exemple canonique pour vous en faire une idée:la source
Vous pourriez également envisager:
l'outil GNU appelé
m4
qui est un processeur de texte qui produit le texte que vous souhaitez prendre en entrée un modèle avec les parties à modifier. Ce serait sûrement plus simple qu'un script shell. (il fonctionne plus ou comme un préprocesseur C avec la macro #define IIRC).l'outil GNU
xsltproc
qui applique une transformation et vous donne la sortie. Le modèle est dansxml
, etxslt
est le format des choses de transformation à faire à votrexml
afin de sortir du texte.Personnellement, j'ai une préférence pour
xslt
, mais dans votre cas, cela ne correspondrait pas aux champs du formulaire%DATA1%
%DATA2%
. Il a besoin de XML, donc vous détesteriez changer vos modèles.Ainsi, vous devriez vraiment y jeter un œil
m4
.Haskell
langage de programmation est vraiment très bon pour transformer les flux. Je ne considère cette idée que parce que les amateurs de Haskell parlent du merveilleuxParsec
paquet, qui permet une analyse naturelle des flux de chaînes. Beaucoup mieux que xslt, qui est déjà bon. Je ne fais que les répéter, parce que je suis en train d'apprendre Haskell, et je n'ai pas la moindre idée de comment transformer du texte avec lui pour l'instant .la source
Je pense que vous feriez mieux de regarder un vrai langage de script, comme PHP, Perl ou Python, pour faire quelque chose comme ça, surtout si vous ne voulez vraiment pas entrer dans des scripts shell complexes à grande échelle.
la source
Je ne sais pas pourquoi vous faites cela, mais vous avez deux modèles ici. L'un est votre «base de données» et l'autre est votre véritable modèle. Les deux sont faciles à manipuler avec shtpl . (mon projet privé, donc peu utilisé, mais a été développé pour résoudre réellement ce genre de problèmes)
Avec shtpl, vous feriez quelque chose comme ceci:
Contenu du fichier 'configuration':
Contenu du fichier 'base de données' (j'ai supposé que le délimiteur est tab (\ t)):
Contenu de generatetemplates.sh:
Contenu de main.txt (other.txt est tout à fait le même):
Donc, exécuter generatetemplates.sh
nous génère first.txt, second.txt et third.txt.
Petite explication: dans generatetemplates.sh se trouve d'abord la «base de données» nécessaire générée à partir de votre fichier de configuration. Et deuxièmement pour chaque tupel de la base de données, enfin le fichier Out correspondant de votre In-template.
Remarque: Une donnée vide [123] pose problème. Ce n'est donc pas possible avec cette approche.
Alors, espérons que c'est assez simple pour vos besoins.
S'amuser!
la source
J'ai récemment publié un projet open source qui accomplit exactement cela en utilisant une syntaxe de modèle de type jinja. Cela s'appelle un cookie . Voici une démo:
la source
Consultez tcat.sh . Supposons que vous ayez un fichier modèle:
puis
Production:
la source