Snippets: Shell: Sed for Templating

 20th August 2020 at 2:19pm

sed 是一个通用的文本操作工具,它可以对文件 in-place find and replace,但是它不是一个 template engine。Sed 在自己的 script 格式 中使用了大量的特殊字符来做控制功能。所以在用 sed 做模板替换时,需要考虑几点。

用什么方式表示模板中要被替换的变量?

这个 SO 回答 提供了一种机制:

sed -e "s/:param1:/$param1/g" \
    -e "s/:param2:/$param2/g" \
    -e "s/:param3:/$param3/g" \
    httpd.conf.template > $HTTPDHOME/etc/httpd.conf

我觉得简明有效。这里对 :param1: 这种替换名的格式选择,需要避开 sed 本身的 控制字符

模板中变量的值是否跟 sed 的控制字符冲突?

我还不知道,后面遇到了这类使用场景再考虑。