【发布时间】:2015-04-28 23:19:32
【问题描述】:
我正在尝试编写一个 bash 脚本,用同名的环境变量替换文件中所有出现的占位符。例如,如果我有如下文件...
This is an {{VAR1}} {{VAR2}}.
It should work across multiple lines in this {{VAR2}}.
...我设置了以下环境变量:
VAR1='example'
VAR2='file'
在我的文件上运行脚本后,我应该得到输出:
This is an example file.
It should work across multiple lines in this file.
我确信必须有一个使用 awk/sed 的解决方案,但到目前为止,如果一行中有多个变量,我最接近的解决方案无法处理。到目前为止,这是我的尝试:
cat example.txt | grep -o '{{.*}}' > temp
while read placeholder; do
varName=$(echo "$placeholder" | tr -d '{}')
value="${!varName}"
sed -i "s/$placeholder/$value/g" "$file"
done < temp
rm -rf temp
【问题讨论】:
-
您考虑过使用
m4宏处理器吗? -
@MarkSetchell 我没听说过 m4,但我会去看看。谢谢。