在bash中是否有办法用文件文件中的占位符替换变量的内容?

时间:2013-04-26 06:12:27

标签: bash sed awk centos

在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用动态内容替换标记的方法。

这可能吗?

5 个答案:

答案 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