Я должен регулярно создавать более 100 текстовых файлов из шаблонов.
В настоящее время я использую слишком сложный сценарий оболочки. Я думаю, что есть более разумный способ справиться с этим, но я не знаю как.
У меня есть «база данных»:
# 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
И файл конфигурации:
template_main=main.txt
template_other=other.txt
text1=whatever
text2=blah
Шаблоны представляют собой текстовые файлы с заполнителями, такими как %% data2 %% (форма заполнителей может быть изменена).
Кто-нибудь знает инструмент для автоматизации этого лучше, чем со сложным сценарием оболочки?
shell-script
text-processing
Грегори МУССАТ
источник
источник
Ответы:
Вероятно, существуют тысячи таких языков шаблонов и связанного программного обеспечения. Популярным примером является ERB , который является частью ванильного Ruby. После установки Ruby вы можете запустить
irb
редактор или просто вставить канонический пример, чтобы почувствовать это:источник
Вы также можете рассмотреть:
инструмент GNU, называемый
m4
текстовым процессором, который выводит текст, который вы хотите, принимая в качестве входных данных шаблон с частями для изменения. Это, безусловно, будет проще, чем сценарий оболочки. (это работает больше или как препроцессор C с #define macro IIRC).инструмент GNU,
xsltproc
который применяет преобразование и выдает результат. Шаблон находится вxml
иxslt
является форматом преобразований, которые необходимо сделатьxml
для вывода текста.Лично у меня есть предпочтение
xslt
, но в вашем случае это не подходит для полей в форме%DATA1%
%DATA2%
. Он нуждается в XML, так что вы бы не хотели менять свои шаблоны.Таким образом, вы действительно должны взглянуть на
m4
.Haskell
язык программирования действительно хорош в преобразовании потоков. Я рассматриваю только эту идею, потому что любители Хаскелла говорят о чудесномParsec
пакете, который позволяет естественный анализ струнных потоков. Гораздо лучше, чем xslt, что уже хорошо. Я только повторяю их, потому что я только изучаю Haskell, и у меня пока нет единой идеи, как преобразовать текст с ним .источник
Я думаю, что вам было бы лучше взглянуть на настоящий язык сценариев, такой как PHP, Perl или Python, чтобы сделать что-то подобное для вас, особенно если вы действительно не хотите вдаваться в масштабные сложные сценарии оболочки.
источник
Я не знаю, почему вы это делаете, но у вас есть два шаблона здесь. Один - это ваша «база данных», а второй - ваш настоящий шаблон. Обе легко справиться со штпл . (мой частный проект, поэтому он не очень широко используется, но был разработан для решения подобных проблем)
С shtpl вы бы сделали что-то вроде этого:
Содержимое файла конфигурации
Содержимое файла базы данных (я предположил, что разделителем является символ табуляции (\ t)):
Содержимое файла generatetemplates.sh:
Содержимое файла main.txt (other.txt точно такой же):
Так что выполнение generatetemplates.sh
генерирует нас first.txt, second.txt и third.txt.
Небольшое объяснение: в generatetemplates.sh сначала указывается необходимая «база данных», сгенерированная из вашего файла конфигурации. И, во-вторых, для каждого tupel в базе данных, наконец, соответствующий Out-файл из вашего In-шаблона.
Примечание: пустые данные [123] не читаются. Так что это невозможно при таком подходе.
Итак, надеюсь, что это достаточно просто для ваших нужд.
Радоваться, веселиться!
источник
Недавно я опубликовал проект с открытым исходным кодом, который выполняет это с использованием синтаксиса шаблона, похожего на jinja. Это называется cookie . Вот демо:
источник
Проверьте tcat.sh . Скажем, у вас есть файл шаблона:
тогда
Вывод:
источник