【问题标题】:Add a entry (variable) yaml file using sed使用 sed 添加条目(变量)yaml 文件
【发布时间】:2021-12-07 00:33:30
【问题描述】:

我有一个如下所示的 yaml 文件 (dsn-details.yaml):

postgresql:
  Database: postgres
  Servername: server
  Username: user
  Password: pwd
  Port: 5432

我想在 postgresql 下添加新条目并想要这样的东西:

postgresql:
  version: 13.01
  Database: postgres
  Servername: server
  Username: user
  Password: pwd
  Port: 5432

我可以使用以下命令来做同样的事情:

connector="postgresql"

sed -r "s/^(\s*${connector}\s*:\s*).*/&\n\  version: 13.01/" -i dsn-details.yaml

但是,我不想在上述 sed 命令中硬编码“版本:13.01”部分。我想使用如下变量传递它:

versionentry="version: 13.01"
sed -r "s/^(\s*${connector}\s*:\s*).*/&\n\${versionentry}/" -i dsn-details.yaml

在这种情况下,我得到了错误:

sed: -e expression #1, char 45: unknown option to `s'

任何人都可以帮助提供确切的命令

【问题讨论】:

标签: shell sed yaml


【解决方案1】:

您的sed 命令转义了$,如果您想替换变量的值,它不应该这样做。它也错过了缩进。

这是一个工作版本:

#!/bin/sh
connector="postgresql"
versionentry="version: 13.01"
sed -r "s/^(\s*${connector}\s*:\s*).*/&\n  ${versionentry}/" <<'EOF'
postgresql:
  Database: postgres
  Servername: server
  Username: user
  Password: pwd
  Port: 5432
EOF

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-16
    • 1970-01-01
    • 1970-01-01
    • 2019-12-11
    • 1970-01-01
    • 1970-01-01
    • 2020-10-28
    相关资源
    最近更新 更多