在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 关于不使用 awk
、sed
或其他一些字符串实用程序是正确的。使用 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
我有以下 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 关于不使用 awk
、sed
或其他一些字符串实用程序是正确的。使用 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