0

bash 中有没有办法用变量的内容替换文本文件中的占位符?

例如,我想发送一封电子邮件通知,如下所示:

Dear Foo, 

Alert: <Alert error text 1> 

<Alert error text 2>

blah blah blah blah blah blah

我看到了一篇相关文章(如何在文本文件中替换 ${} 占位符?),但在示例中,它添加了静态内容。问题是“alert error text 1”和“alert error text 2”总是在变化。我不知道使用 SED/AWK 将标记替换为动态内容的方法。

这可能吗?

4

5 回答 5

3
e1=dog
e2=bird
sed "
s/<Alert error text 1>/$e1/
s/<Alert error text 2>/$e2/
"
于 2013-04-26T06:34:34.477 回答
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"
于 2013-04-26T12:50:59.897 回答
1
 sed -e 's/<Alert error text 1>/'$e1'/' -e 's/<Alert error text 2>/'$e2'/' file.txt

其中 $e1 和 $e2 是变量。

于 2013-04-26T06:43:51.250 回答
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

只要确保您控制模板,否则运行的任何内容都将以您的用户身份运行。

于 2016-06-26T20:16:59.617 回答
0

这可能对您有用:

template () {
cat <<!
Dear $1,

I'm fine, hope you are too.

Love $2
!
}

template foo bar
于 2013-04-28T10:24:23.213 回答