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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用带反斜杠的sed命令时出现AWS CloudFormation模板验证错误相关的知识,希望对你有一定的参考价值。

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

我有以下sed命令:

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

当我在amazon linux的命令行运行时,它会按预期运行并在Properties:行下正确缩进Tags:行

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运行命令时在插入的行上获得正确的缩进?

答案

不知道cloudformation template规则,但通常双引号字符串允许用于特殊序列,允许不可打印的字符及其oct / hex表示等。例如:"用于表示引号内的双引号字符。所以,要代表它需要\

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

以上是关于使用带反斜杠的sed命令时出现AWS CloudFormation模板验证错误的主要内容,如果未能解决你的问题,请参考以下文章

运行命令 **sed** 时出现 docker 容器错误 [重复]

从 Golang 运行命令时出现 AWS CLI 错误

运行任何 aws CLI 命令时出现错误“您必须指定一个区域”

sed命令反斜杠的转义

URL结尾反斜杠对SEO的影响(转)

当下一个字符为“t”时,使用sed命令转义反斜杠