【问题标题】:escape single quote within yaml file在 yaml 文件中转义单引号
【发布时间】:2020-02-06 21:51:45
【问题描述】:

如何在 yaml 中为以下语句转义单引号。基本上针对下面的awk和sed表达式??

...
    command: ['sh', '-c']
    args: ['
        awk -F"\t" '{print $1}' ....
        sed \\'s/\"//g\\' ....
                    ']

下面是一个最小的例子

command: ['sh', '-c']
args: ['
          echo " Single quote is '  "
          ']
will fail with error: error parsing exemple.yml: error converting YAML to JSON: yaml: line 2: mapping values are not allowed in this context

【问题讨论】:

  • 不清楚,请在您的帖子中提供有关您的问题的更多详细信息,然后让我们知道。
  • 它们是 awk 和 sed 命令是否相关?它是否适用于简化版本,例如args: ['a b ' c']
  • awk 和 sed 我猜不相关,在代码中添加了一个最小示例
  • 这个特定错误的原因与引号或转义无关。问题是你缩进了args:command: 更深。

标签: awk sed yaml


【解决方案1】:

您的错误的直接原因是args:command: 向右缩进更远。假设您希望 command:args: 都是相同映射的键,它们需要具有相同的缩进。

至于如何在 YAML 中转义内引号,最简单的解决方案是不要

在您的 YAML 中,您使用 流样式序列 ([ … ]) 和一个项目,流样式标量(字符串)括在引号中 (@987654327 @)。为避免转义问题,请切换到块样式序列文字块样式标量

command: [sh, -c]
args:
  - |
    awk -F"\t" '{print $1}' ...
    sed 's/"//g' ...

在上面的 YAML 中,与 args 键对应的值仍然是具有单个项目的序列,但它使用块样式,其中每个项目前面都有 -| 表示literal style,这意味着后面的行(并且与第一行具有相同或更大的缩进)都是单个标量,应该保留换行符。

您可以在下面的 sn-p 中看到这个 YAML 将如何被解析——并且字符串的多行和内引号被正确保留。

const yaml = `
command: [sh, -c]
args:
  - |
    awk -F"\t" '{print $1}' ...
    sed 's/"//g' ...
`;

const data = jsyaml.safeLoad(yaml);

console.log(data);
console.log(data.args[0]);
<script src="https://cdnjs.cloudflare.com/ajax/libs/js-yaml/3.13.1/js-yaml.min.js"></script>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-27
    • 1970-01-01
    • 1970-01-01
    • 2013-01-30
    • 1970-01-01
    • 1970-01-01
    • 2019-08-26
    相关资源
    最近更新 更多