用Shell变量替换yml文件中的值

时间:2020-02-11 07:07:14

标签: bash shell scripting yaml

我有一个这样的config.yml文件:

defaultdict

我创建了一个shell脚本,它将为我提供virtualIP1 = '10 .104.84.221'和virtualIP2 = '10 .104.94.2'的值。 如何使Shell脚本在Shell脚本中将所有vIP1值替换为virtualIP1,并将vIP2替换为virtualIP2?

3 个答案:

答案 0 :(得分:1)

如果您选择yq,请尝试以下操作:

export virtualIP1='10.104.84.221'
export virtualIP2='10.104.94.2'

yq -y < config.yml '(.. | select(.HA_PGPOOL_VIRTUAL_IP? == "vIP1") | .HA_PGPOOL_VIRTUAL_IP) |= env.virtualIP1 | (.. | select(.HA_PGPOOL_VIRTUAL_IP? == "vIP2") | .HA_PGPOOL_VIRTUAL_IP) |= env.virtualIP2'

答案 1 :(得分:0)

  1. 初始化virtualIP1和virtualIP2

    virtualIP1='10.104.84.221'

    virtualIP2='10.104.94.2'

  2. 运行下面的命令,查看是否获得所需的输出:

    sed -e "s/vIP1/$virtualIP1/g" filename

    sed -e "s/vIP2/$virtualIP2/g" filename

  3. 如果以上提供了所需的输出,请使用sed而不是i选项运行e,最好保留旧文件的备份。

    sed -i.bak "s/vIP1/$virtualIP1/g" filename

    sed -i.bak "s/vIP2/$virtualIP2/g" filename

答案 2 :(得分:0)

您可以尝试以下方法:

sed -e 's/vIP1/10.104.84.221/' -e 's/vIP2/10.104.94.2/' config.yml