Ich muss regelmäßig mehr als 100 Textdateien aus Vorlagen erstellen.
Ich verwende derzeit ein übermäßig kompliziertes Shell-Skript. Ich denke, es gibt eine intelligentere Möglichkeit, damit umzugehen, aber ich weiß nicht wie.
Ich habe eine "Datenbank":
# 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
Und eine Konfigurationsdatei:
template_main=main.txt
template_other=other.txt
text1=whatever
text2=blah
Die Vorlagen sind Textdateien mit Platzhaltern wie %% data2 %% (das Platzhalterformular kann geändert werden).
Kennt jemand ein Tool, um dies besser zu automatisieren als mit einem komplizierten Shell-Skript?
shell-script
text-processing
Gregory MOUSSAT
quelle
quelle
Antworten:
Es gibt wahrscheinlich Tausende solcher Vorlagensprachen und zugehöriger Software. Ein beliebtes Beispiel ist ERB , das Teil von Vanilla Ruby ist. Nach der Installation von Ruby können Sie
irb
einen Editor oder einen Editor starten und einfach das kanonische Beispiel einfügen, um ein Gefühl dafür zu bekommen:quelle
Sie könnten auch berücksichtigen:
Das aufgerufene GNU-Tool
m4
ist ein Textprozessor, der den gewünschten Text als Eingabe einer Vorlage mit den zu ändernden Teilen ausgibt. Es wäre sicherlich einfacher als Shell-Skript. (Es funktioniert mehr oder mehr wie ein C-Präprozessor mit #define macro IIRC).das GNU-Tool
xsltproc
, das eine Transformation anwendet und Ihnen die Ausgabe gibt. Die Vorlage befindet sich inxml
undxslt
ist das Format der Transformationsvorgänge, die Siexml
ausführen müssen, um Text auszugeben.Persönlich habe ich eine Präferenz für
xslt
, aber in Ihrem Fall würde es nicht zu Feldern im Formular passen%DATA1%
%DATA2%
. Es braucht XML, also würden Sie es hassen, Ihre Vorlagen zu ändern.Also solltest du dir das mal ansehen
m4
.Haskell
Programmiersprache wirklich sehr gut darin ist, Streams zu transformieren. Ich denke nur über diese Idee nach, weil Haskell-Liebhaber über das wunderbareParsec
Paket sprechen , das das natürliche Parsen von String-Streams ermöglicht. Viel besser als xslt, was schon gut ist. Ich wiederhole sie nur, weil ich gerade Haskell lerne und ich nicht die einzige Idee habe, wie ich Text damit transformieren kann .quelle
Ich denke, Sie sollten sich besser eine echte Skriptsprache wie PHP, Perl oder Python ansehen, um so etwas für Sie zu tun, insbesondere wenn Sie wirklich nicht in komplexe Shell-Skripte in großem Maßstab einsteigen möchten.
quelle
Ich weiß nicht, warum Sie das tun, aber Sie haben hier zwei Vorlagen. Eine ist Ihre 'Datenbank' und eine ist Ihre echte Vorlage. Beide sind mit shtpl einfach zu handhaben . (privates Projekt von mir, also nicht weit verbreitet, aber entwickelt, um tatsächlich diese Art von Problemen zu lösen)
Mit shtpl würden Sie so etwas tun:
Inhalt der Datei 'Konfiguration':
Inhalt der Datei 'Datenbank' (ich nahm an, dass das Trennzeichen tab (\ t) ist):
Inhalt von generatetemplates.sh:
Inhalt von main.txt (other.txt ist ziemlich gleich):
Führen Sie also generatetemplates.sh aus
generiert uns first.txt, second.txt und Third.txt.
Kleine Erklärung: In generatetemplates.sh wird zuerst die benötigte 'Datenbank' aus Ihrer Konfigurationsdatei generiert. Und zweitens für jedes Tupel in der Datenbank schließlich die entsprechende Out-Datei aus Ihrer In-Vorlage.
Hinweis: Leere Daten [123] können nicht gelesen werden. Mit diesem Ansatz ist dies also nicht möglich.
Hoffen Sie also, dass dies für Ihre Bedürfnisse einfach genug ist.
Habe Spaß!
quelle
Ich habe kürzlich ein Open-Source-Projekt veröffentlicht, das genau das mit einer jinja-ähnlichen Vorlagensyntax erreicht. Es heißt Cookie . Hier ist eine Demo:
quelle
Schauen Sie sich tcat.sh an . Angenommen, Sie haben eine Vorlagendatei:
dann
Ausgabe:
quelle