在yml文件中查找替换

Find and replace in yml file

我有以下 yml 文件:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: queue
spec:
  selector:
    matchLabels:
      app: queue
  replicas: 1
  template: # template for the pods
    metadata:
      labels:
        app: queue
    spec:
      containers:
      - name: 
        image: 
        resources:
          requests:
            memory: 300Mi

我需要在部署部分指定名称和图像 种类:部署 元数据: 名称:队列

我需要在此文件中输入以下字符串以进行部署 下

 spec:
      containers:

节。

go:dev
go:latest

期望输出

apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: queue
    spec:
      selector:
        matchLabels:
          app: queue
      replicas: 1
      template: # template for the pods
        metadata:
          labels:
            app: queue
        spec:
          containers:
          - name: go:dev
            image: go:latest
            resources:
              requests:
                memory: 300Mi

是否可以使用某些正则表达式或类似的 shell 脚本执行上述操作?

@RavinderSingh13 关于不使用 awksed 或其他一些字符串实用程序是正确的。使用 yq 是执行此操作的正确方法。

https://github.com/mikefarah/yq

https://mikefarah.gitbook.io/yq/

我用了yq version 4.6.3.

要单独更新每个 属性,运行 以下命令。 -i 就地修改文件。

yq -i eval '.spec.template.spec.containers[0].name = "go:dev"' file.yml
yq -i eval '.spec.template.spec.containers[0].image = "go:latest"' file.yml

yq 查询结果也可以相互传递。这可以在此处利用以在单个命令中更新两个字段。

yq -i eval '.spec.template.spec.containers[0].name = "go:dev" | 
            .spec.template.spec.containers[0].image = "go:latest"' file.yml