Muszę regularnie tworzyć ponad 100 plików tekstowych z szablonów.
Obecnie używam zbyt skomplikowanego skryptu powłoki. Myślę, że jest mądrzejszy sposób na poradzenie sobie z tym, ale nie wiem jak.
Mam „bazę danych”:
# 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
I plik konfiguracyjny:
template_main=main.txt
template_other=other.txt
text1=whatever
text2=blah
Szablony to pliki tekstowe z symbolami zastępczymi, takimi jak %% data2 %% (formularz zastępczy można zmienić).
Czy ktoś zna narzędzie do automatyzacji tego lepiej niż skomplikowany skrypt powłoki?
shell-script
text-processing
Gregory MOUSSAT
źródło
źródło
Odpowiedzi:
Prawdopodobnie istnieją tysiące takich języków szablonów i powiązanego oprogramowania. Popularnym przykładem jest ERB , który jest częścią waniliowego Ruby. Po zainstalowaniu Ruby możesz uruchomić
irb
lub edytor i po prostu wkleić kanoniczny przykład, aby się zorientować:źródło
Możesz również rozważyć:
zwane narzędziem GNU,
m4
które jest procesorem tekstowym, który wypisuje tekst, który chcesz pobrać jako szablon szablonu, którego części chcesz zmienić. Z pewnością byłoby to prostsze niż skrypt powłoki. (działa więcej lub przypomina preprocesor C z makrem #define IIRC).narzędzie GNU,
xsltproc
które stosuje transformację i daje wynik. Szablon jestxml
, ixslt
to jest format z rzeczy do zrobienia transformacji doxml
tak do tekstu wyjściowego.Osobiście preferuję
xslt
, ale w twoim przypadku nie pasowałoby to do pól w formularzu%DATA1%
%DATA2%
. Wymaga xml, więc nie chciałbyś zmieniać swoich szablonów.Dlatego naprawdę powinieneś rzucić okiem
m4
.Haskell
język programowania jest naprawdę dobry w przekształcaniu strumieni. Zastanawiam się tylko nad tym pomysłem, ponieważ miłośnicy Haskell mówią o cudownymParsec
pakiecie, który umożliwia naturalne analizowanie strumieni struny. Znacznie lepiej niż xslt, który jest już dobry. Powtarzam je tylko, ponieważ dopiero uczę się języka Haskell i na razie nie mam pojęcia, jak przekształcić go za pomocą tekstu .źródło
Myślę, że lepiej byłoby spojrzeć na prawdziwy język skryptowy, taki jak PHP, Perl lub Python, aby zrobić coś takiego dla ciebie, szczególnie jeśli naprawdę nie chcesz wdawać się w złożone skrypty powłoki na dużą skalę.
źródło
Nie wiem, dlaczego to robisz, ale masz tutaj dwa szablony. Jeden to twoja „baza danych”, a drugi to twój prawdziwy szablon. Oba są łatwe w obsłudze dzięki shtpl . (mój prywatny projekt, więc nie jest powszechnie używany, ale został opracowany w celu rozwiązania tego rodzaju problemów)
Z shtpl zrobiłbyś coś takiego:
Treść „konfiguracji” pliku:
Zawartość pliku „baza danych” (założyłem, że separatorem jest tab (\ t)):
Treść pliku generatetemplates.sh:
Zawartość main.txt (other.txt jest taka sama):
Więc wykonanie pliku generatetemplates.sh
generuje nas first.txt, second.txt i third.txt.
Małe wyjaśnienie: W generatetemplates.sh jest najpierw potrzebna „baza danych” wygenerowana z pliku konfiguracyjnego. Po drugie, dla każdego tupela w bazie danych na końcu odpowiedni plik wyjściowy z twojego szablonu wejściowego.
Uwaga: Odczyt problemów z pustymi danymi [123]. Dzięki takiemu podejściu nie jest to możliwe.
Mam nadzieję, że jest to wystarczająco proste dla twoich potrzeb.
Baw się dobrze!
źródło
Niedawno opublikowałem projekt open source, który osiąga ten właśnie efekt przy użyciu składni szablonu podobnej do jinja. To się nazywa ciasteczko . Oto demo:
źródło
Sprawdź tcat.sh . Załóżmy, że masz plik szablonu:
następnie
Wynik:
źródło