我需要 sed/awk 命令首先匹配文件 test.yaml 中的单词 (my-app),然后替换 -name: def 中的值(value: 中的 1234),随后替换值(中的 abc-1234)值:) 对于-名称:a.b.c
我尝试过 sed 命令
sed -i -e '/d.e.f/{ n; s/value: .*/value: '要更改的值'/g }' test.yaml
它只是替换我文件中所有应用程序的 -name: d.e.f 值。然而,我实际上只想对一个应用程序(我的应用程序)执行更改
您应该使用 YAML 解析器
kislyuk/yq示例:
yq -y 'map(select(.name == "my-app").set[].value |= (
select(numbers == 1234) = 5678
| strings |= sub("1234"; "5678")
))' test.yaml
与 itchyny/gojq 相同的示例:
gojq --yaml-input --yaml-output 'map(select(.name == "my-app").set[].value |= (
select(numbers == 1234) = 5678
| strings |= sub("1234"; "5678")
))' test.yaml