使用带反斜杠的sed命令时出现AWS CloudFormation模板验证错误

时间:2018-03-04 13:51:14

标签: sed amazon-cloudformation

我正在尝试通过AWS CloudFormation模板向文件中添加多行来向AWS lambda serverless-output.yaml文件添加与部署相关的变量。

我有以下sed命令:

sed -ie '/^    Properties:/a\      Tags:' ./serverless-output.yaml

当我在amazon linux的命令行运行时,它会按预期运行并在属性:行

下正确缩进标签:行
EC2StartStop:
  Properties:
    Tags:

当我将该行放入cloudformation模板时,我收到格式错误:

"sed -ie '/^    Properties:/a\      Tags:' ./serverless-output.yaml",

Error
Template validation error: Template format error: JSON not well-formed.
(line 200, column 36)

要摆脱错误,我必须在' / a'之后删除反斜杠:

"sed -ie '/^    Properties:/a    Tags:' ./serverless-output.yaml"

但是然后Tags:行没有缩进,导致.yaml文件中出现语法错误:

  EC2StartStop:
    Properties:
Tags:

sed命令适用于识别我需要插入行的位置,但是如何通过cloudformation运行命令时在插入的行上获得正确的缩进?

1 个答案:

答案 0 :(得分:0)

不了解cloudformation template规则,但通常双引号字符串允许\用于特殊序列,允许不可打印的字符及其oct / hex表示等。 :\"用于表示引号内的双引号字符。因此,要表示\,需要\\

"sed -ie '/^    Properties:/a\\      Tags:' ./serverless-output.yaml",