我正在考虑使用 sed 替换 Yaml 文件中的一些缩进行。
resources:
limits:
cpu: 500m
memory: 512Mi
requests:
cpu: 250m
memory: 256Mi
Yaml 对其缩进非常严格,并且想知道如何在示例“limits:”之后完成文本的替换
我试过 '0,/cpu:.*m/s//cpu: 900m/'
和 '/limits:/!b;n;s//ccpu: 900 米'
'0,/cpu:.*m/s//cpu: 900m/'
输出:
resources:
limits:
cpu: 900m
memory: 512Mi
requests:
cpu: 250m
memory: 256Mi
我遇到的唯一问题是我想指定替换应该在示例 CPU 上完成,而不是请求。
所以我尝试了 '/limits:/!b;n;s//ccpu: 900m'
输出:
resources:
limits:
cpu: 900m
memory: 512Mi
requests:
cpu: 250m
memory: 256Mi
注意到它没有正确缩进吗?我怎样才能通过保留缩进来实现这一点,如果我可以在“限制:”或“请求:”之后指定第一行和第二行,那就太好了。
最佳答案
如果无法安装yaml parsing tools such as yq
,您可以使用此 gnu-sed
解决方案:
sed -E '/limits:/!b;n;s/^([[:blank:]]*cpu: ).*/\1900m/' file.yml
resources:
limits:
cpu: 900m
memory: 512Mi
requests:
cpu: 250m
memory: 256Mi
分割:
/limits:/!b
: 搜索文本limits:
否则分支到脚本结尾n
:读取/追加下一行输入到模式空间s/.../.../
:做这个替换^
:比赛开始([[:blank:]]*cpu: )
:匹配 0 个或多个空格后跟文本cpu:
。在捕获组 #1 中捕获它.*
:匹配剩余的文本直到行尾/\1900m/
:替换为捕获组 #1 的反向引用,即\1
后跟新值900m
关于regex - 使用 SED 替换缩进的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74029140/