在bash中是否有办法用文件文件中的占位符替换变量的内容?
例如,我想发送一封如下所示的电子邮件通知:
Dear Foo,
Alert: <Alert error text 1>
<Alert error text 2>
blah blah blah blah blah blah
我看到了一篇相关文章(How to replace ${} placeholders in a text file?),但在示例中,它添加了静态内容。问题是&#34;警告错误文本1&#34;和&#34;警告错误文本2&#34;总是在变化。我不知道使用SED / AWK用动态内容替换标记的方法。
这可能吗?
答案 0 :(得分:3)
e1=dog
e2=bird
sed "
s/<Alert error text 1>/$e1/
s/<Alert error text 2>/$e2/
"
答案 1 :(得分:2)
这似乎是printf
的工作:
template="Dear Foo,
Alert: %s
%s
%s"
# Prior to bash 4
instance=$(printf "$template" "$AlertText1" "$AlertText2" "$Body")
# Bash 4+
printf -v instance "$template" "$AlertText1" "$AlertText2" "$Body"
答案 2 :(得分:1)
sed -e 's/<Alert error text 1>/'$e1'/' -e 's/<Alert error text 2>/'$e2'/' file.txt
其中$ e1和$ e2是变量。
答案 3 :(得分:1)
您是否看到此处发布的旧解决方案可以处理命令替换?
https://stackoverflow.com/a/17030953/1322463
eval "cat <<EOF
$(<template.txt)
EOF
" 2> /dev/null
所以模板可以有这样的东西:
Hello $USER, Today is $(date)
输出:
Hello plockc, Today is Sun Jun 26 13:16:28 PDT 2016
只需确保您控制模板,否则运行的任何内容都以您的用户身份运行。
答案 4 :(得分:0)
这可能对您有用:
template () {
cat <<!
Dear $1,
I'm fine, hope you are too.
Love $2
!
}
template foo bar