Saya harus secara teratur membuat 100+ file teks dari template.
Saat ini saya menggunakan skrip shell yang terlalu rumit. Saya pikir ada cara yang lebih cerdas untuk menangani ini, tetapi saya tidak tahu caranya.
Saya memiliki "database":
# 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
Dan file konfigurasi:
template_main=main.txt
template_other=other.txt
text1=whatever
text2=blah
Templat adalah file teks dengan placeholder seperti %% data2 %% (formulir placeholder dapat diubah).
Apakah ada yang tahu alat untuk mengotomatisasi ini lebih baik daripada dengan skrip shell yang rumit?
shell-script
text-processing
Gregory MOUSSAT
sumber
sumber
Jawaban:
Mungkin ada ribuan bahasa templat seperti itu dan perangkat lunak terkait. Contoh yang populer adalah ERB , yang merupakan bagian dari vanilla Ruby. Setelah menginstal Ruby, Anda dapat memulai
irb
atau mengedit dan cukup menempelkan contoh kanonik untuk merasakannya:sumber
Anda juga dapat mempertimbangkan:
alat GNU disebut
m4
yang merupakan pemroses teks yang menampilkan teks yang ingin Anda ambil sebagai masukan templat dengan bagian yang akan diubah. Itu pasti akan lebih sederhana daripada skrip shell. (berfungsi lebih atau seperti preprocessor C dengan #define macro IIRC).alat GNU
xsltproc
yang menerapkan transformasi dan memberi Anda output. Template sudah adaxml
, danxslt
merupakan format transformasi yang harus dilakukan untuk Andaxml
sehingga untuk menghasilkan teks.Secara pribadi saya memiliki preferensi untuk
xslt
, tetapi dalam kasus Anda meskipun tidak sesuai dengan bidang dalam formulir%DATA1%
%DATA2%
. Perlu xml, jadi Anda akan benci untuk mengubah template Anda.Jadi Anda harus benar-benar melihatnya
m4
.Haskell
bahasa pemrograman benar-benar bagus untuk mentransformasikan stream. Saya hanya mempertimbangkan ide ini karena pecinta Haskell berbicara tentangParsec
paket luar biasa, yang memungkinkan penguraian alami aliran string. Jauh lebih baik daripada xslt, yang sudah bagus. Saya hanya mengulanginya, karena saya baru belajar Haskell, dan saya belum punya ide bagaimana mengubah teks dengannya untuk saat ini .sumber
Saya pikir Anda akan lebih baik melihat bahasa scripting nyata, seperti PHP, Perl, atau Python, untuk melakukan sesuatu seperti ini untuk Anda, terutama jika Anda benar-benar tidak ingin masuk ke skrip shell skala besar yang kompleks.
sumber
Saya tidak tahu mengapa Anda melakukan itu, tetapi Anda memiliki dua templat di sini. Satu adalah 'database' Anda dan satu adalah template asli Anda. Keduanya mudah ditangani dengan shtpl . (proyek pribadi saya, jadi tidak banyak digunakan, tetapi dikembangkan untuk menyelesaikan masalah-masalah semacam itu)
Dengan shtpl Anda akan melakukan sesuatu seperti ini:
Isi file 'konfigurasi':
Konten file 'database' (saya berasumsi, bahwa pembatas adalah tab (\ t)):
Konten generatetemplates.sh:
Konten main.txt (other.txt hampir sama):
Jadi mengeksekusi generatetemplates.sh
menghasilkan kita first.txt, second.txt dan third.txt.
Sedikit penjelasan: Pada generatetemplates.sh adalah yang pertama diperlukan 'database' yang dihasilkan dari file konfigurasi Anda. Dan yang kedua untuk setiap tupel dalam database akhirnya Out-file yang sesuai dari In-template Anda.
Catatan: Data kosong [123] sulit dibaca. Jadi tidak mungkin dengan pendekatan ini.
Jadi, harap ini cukup sederhana untuk kebutuhan Anda.
Selamat bersenang-senang!
sumber
Baru-baru ini saya menerbitkan proyek open source yang hanya menggunakan sintaksis template jinja-like. Ini disebut cookie . Ini demo:
sumber
Periksa tcat.sh . Katakanlah Anda memiliki file templat:
kemudian
Keluaran:
sumber