bash 用多行替换 mime 占位符

bash replace mime placeholder with multiple line

我有一个 MIME 格式的电子邮件模板,电子邮件正文的一部分是占位符 ${result}

  <body>
      <p>${result}</p>
  </body>

在 bash 脚本中,我有一个变量 $RESULT 将以下 table 存储在一个字符串中。

----------------------------------------------------
           Sydney    Tokyo      London     New York      
product1      100      120           0           70
product2        4       80         210          110
product3      150       50          80           20
----------------------------------------------------

我还有几个占位符需要替换(只是一个短字符串或一个词),所以我使用了以下 sed 命令,但是它 returns 出错了:

sed -e "s/${subject}//" \
    -e "s/${client}/$NAME/" \
    -e "s/${result}/$RESULT/" temp-email > client-email

错误:

sed: -e expression #3, char 64: unterminated `s' command

我知道这与 \n 有关,但我刚刚开始学习 bash 和 MIME,不知道如何用 $RESULT[= 替换占位符20=]

提前致谢

您可以通过 \n 的使用参数扩展替换换行符

RESULT=${RESULT//$'\n'/'\n'}

或者使用 Perl 来处理替换中的换行符:

CLIENT=$NAME RESULT=$RESULT SUBJECT= perl -pe '
    s/${(subject|client|result)}/$ENV{ uc  }/g'