使用sed/bash替换YAML文件中的项

使用sed/bash替换YAML文件中的项,bash,Bash,我想使用bash脚本动态地将YAML文件中的Addresses字段替换为变量order_列表中的项目,即如果order_列表中有3个项目,那么Addresses字段中的项目也将是3个。顺序无关紧要 ORDERER_LIST="orderer0-orderer-org:7050 orderer1-orderer-org:7050" 以下是yaml文件示例: Orderer: &OrdererDefaults OrdererType: kafka Addresses: -

我想使用bash脚本动态地将YAML文件中的Addresses字段替换为变量order_列表中的项目,即如果order_列表中有3个项目,那么Addresses字段中的项目也将是3个。顺序无关紧要

ORDERER_LIST="orderer0-orderer-org:7050 orderer1-orderer-org:7050"
以下是yaml文件示例:

Orderer: &OrdererDefaults
  OrdererType: kafka
  Addresses:
    - 1 (to be replaced with item in ORDERER_LIST)
    - 2 (to be replaced with item in ORDERER_LIST)
    - etc

而不是寻找和替换元素。我认为应该使用bash脚本生成YAML文件。你可以用下面的方法来做

#!/bin/bash
ORDERER_LIST="orderer0-orderer-org:7050 orderer1-orderer-org:7050"
IFS=' ' read -ra arr <<< "$ORDERER_LIST"
echo "Orderer: &OrdererDefaults
  OrdererType: kafka
  Addresses:"
for i in "${arr[@]}"
do
   echo "    - $i"
done

让我知道它是否有用。

而不是查找和替换元素。我认为应该使用bash脚本生成YAML文件。你可以用下面的方法来做

#!/bin/bash
ORDERER_LIST="orderer0-orderer-org:7050 orderer1-orderer-org:7050"
IFS=' ' read -ra arr <<< "$ORDERER_LIST"
echo "Orderer: &OrdererDefaults
  OrdererType: kafka
  Addresses:"
for i in "${arr[@]}"
do
   echo "    - $i"
done

如果有帮助,请告诉我。

为什么不使用正确的语法感知YAML解析器?您可以使用
ruamel生成或更新示例YAML(包括非引用锚)。YAML
无需使用bash生成脆弱的“解决方案”,只要YAML语义保持不变,就会中断,但格式已更改(从块到流样式,从纯标量到引号或文字样式标量)我正在尝试最小化依赖关系,因为我将在没有解析器的容器映像上运行。这就是为什么我想使用bashWhy不使用正确的语法感知YAML解析器?您可以生成或更新示例YAML(包括非引用锚定)使用
ruamel.yaml
无需使用bash创建一个脆弱的“解决方案”,只要yaml语义保持不变,就会中断,但格式会发生更改(从块样式到流样式,从普通标量到引用或文字样式标量)我试图最小化依赖关系,因为我将在没有解析器的容器映像上运行。这就是为什么我想使用bash