从模板创建文本文件的工具

Gre*_*SAT 9 shell-script text-processing

我必须定期从模板创建 100 多个文本文件。
我目前使用一个过于复杂的 shell 脚本。我认为有一个更聪明的方法来处理这个问题,但我不知道如何。

我有一个“数据库”:

# 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
Run Code Online (Sandbox Code Playgroud)

和一个配置文件:

template_main=main.txt
template_other=other.txt
text1=whatever
text2=blah
Run Code Online (Sandbox Code Playgroud)

模板是带有 %%data2%% 等占位符的文本文件(占位符形式可以更改)。

有人知道比复杂的 shell 脚本更好的自动化工具吗?

l0b*_*0b0 5

可能有成千上万种这样的模板语言和相关软件。一个流行的例子是ERB,它是 vanilla Ruby 的一部分。安装 Ruby 后,您可以启动irb或编辑器,只需粘贴规范示例即可感受一下:

require 'erb'

x = 42
template = ERB.new <<-EOF
  The value of x is: <%= x %>
EOF
puts template.result(binding)
Run Code Online (Sandbox Code Playgroud)


Ste*_*and 5

你还可以考虑:

  • GNU 工具m4,它是一个文本处理器,它输出您想要作为输入的文本,并将模板与要更改的部分一起输出。它肯定比shell脚本简单。(它更像是一个带有#define 宏 IIRC 的 C 预处理器)。

  • xsltproc应用转换并为您提供输出的 GNU 工具。模板在 中xml,并且xslt是对您进行转换xml以输出文本的格式。

就我个人而言,我更喜欢xslt,但在您的情况下,尽管它不适合表单中的字段 %DATA1% %DATA2%。它需要 xml,因此您会讨厌更改模板。

因此,您真的应该看看m4.

  • 作为另一种选择,有人告诉我Haskell编程语言真的很擅长转换流。我只是在考虑这个想法,因为 Haskell 爱好者谈到了奇妙的Parsec包,它允许自然解析字符串流。比xslt好多了,这已经很好了。我只重复它们,因为我只是在学习 Haskell,我现在没有一个想法如何用它来转换文本。


小智 2

我认为您最好寻找一种真正的脚本语言(例如 PHP、Perl 或 Python)来为您做类似的事情,特别是如果您真的不想使用大规模复杂的 shell 脚本。