如何用yq替换YAML文件中匹配正则的列表值?
使用yq替换YAML中匹配正则的services列表项
针对你的需求,使用mikefarah/yq v4+(当前主流版本)可直接实现,命令如下:
yq eval '.applications[].services |= map(select(test("cups-stage-service.*")) |= "cups-stage-blue-service")' your-file.yaml
命令解析:
.applications[]:遍历applications数组中的每一个应用对象.services |= map(...):对每个应用的services数组执行映射处理select(test("cups-stage-service.*")) |= "cups-stage-blue-service":筛选出匹配正则表达式cups-stage-service.*的元素,将其替换为cups-stage-blue-service
效果示例:
若原services列表为:
services: - cups-stage-service - cups-stage-service-v2 - dyn-service
执行命令后会变为:
services: - cups-stage-blue-service - cups-stage-blue-service - dyn-service
如果需要直接覆盖修改原文件,添加-i参数即可:
yq eval -i '.applications[].services |= map(select(test("cups-stage-service.*")) |= "cups-stage-blue-service")' your-file.yaml
内容的提问来源于stack exchange,提问作者Venu Reddy
相关产品推荐
相关产品推荐

