使用shell脚本更改yaml文件的值

djmepvbi  于 2023-01-21  发布在  Shell
关注(0)|答案(3)|浏览(458)

我正在编写一个脚本,例如,用户可以通过键盘输入来更改yaml文件中的IP。但是我在使用sed命令时遇到了问题,有人能帮我吗?我只找到了将字符串替换为命令sed中包含的字符串的命令。
Yaml锉

network:
    address: [00.000.0.00]

脚本

echo "Please enter the desired IP address:" 
read input
ip="$input"
sed??????????????????
mf98qq94

mf98qq941#

根据您的输入,可能会出现以下情况:

read -rp 'Please enter the described IP address: ' input

##: Validate input here, if it is not empty
##: If it is indeed an format that is valid 
##: for your requirement and so on...

sed -E "/network:/{N;/address: \[00\.000\.0\.00\]/s/[[:digit:].]{1,}/$input/;}" file.yaml
2ic8powd

2ic8powd2#

对于yq(与jq相同,但用于YAML):

yq '.network.computer.address = "[1.1.1.1]"' file.yaml 
{
  "network": {
    "address": "[1.1.1.1]"
  }
}

这是适合这种用法的工具,python和go版本都可以在这里使用。

g2ieeal7

g2ieeal73#

如果您一直使用sed

sed -E 's/(address: *)\[[^][]+\]/\1[1.1.1.1]/' file.yaml

sed 's/\(address: *\)\[.*/\1[1.1.1.1]/' file.yaml

输出

network:
   computer:
       name: xxxx
       address: [1.1.1.1]

添加-i以编辑 * 在位 *

相关问题