sed/awk 命令匹配文件中的单词,然后替换下面的行

问题描述 投票:0回答:1

我有一个示例文件:

我需要 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 值。然而,我实际上只想对一个应用程序(我的应用程序)执行更改

linux shell awk sed
1个回答
0
投票

您应该使用 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
© www.soinside.com 2019 - 2024. All rights reserved.