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 脚本更好的自动化工具吗?
可能有成千上万种这样的模板语言和相关软件。一个流行的例子是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)
你还可以考虑:
GNU 工具m4,它是一个文本处理器,它输出您想要作为输入的文本,并将模板与要更改的部分一起输出。它肯定比shell脚本简单。(它更像是一个带有#define 宏 IIRC 的 C 预处理器)。
xsltproc应用转换并为您提供输出的 GNU 工具。模板在 中xml,并且xslt是对您进行转换xml以输出文本的格式。
就我个人而言,我更喜欢xslt,但在您的情况下,尽管它不适合表单中的字段 %DATA1% %DATA2%。它需要 xml,因此您会讨厌更改模板。
因此,您真的应该看看m4.
Haskell编程语言真的很擅长转换流。我只是在考虑这个想法,因为 Haskell 爱好者谈到了奇妙的Parsec包,它允许自然解析字符串流。比xslt好多了,这已经很好了。我只重复它们,因为我只是在学习 Haskell,我现在没有一个想法如何用它来转换文本。