我试图改变一个特定的字在yaml文件使用sed命令
kind: Pod
metadata:
name: abc12
spec:
containers:
- image: ubuntu:latest
name: Ubuntu
imagePullPolicy: IfNotPresent
- image: ngnix: latest
name: Nginx
imagePullPolicy: IfNotPresent
...
已尝试使用以下命令sed '/^ * image: ngnix:latest/,/^*[^:]*:s/imagePullPolicy: IfNotPresent/imagePullPolicy: {}/' file.yaml
我需要使用sed/awk命令仅为ngnix更改imagePullPolicy内容。
以下是我想要的输出:
kind: Pod
metadata:
name: abc12
spec:
containers:
- image: ubuntu:latest
name: Ubuntu
imagePullPolicy: IfNotPresent
- image: ngnix: latest
name: Nginx
imagePullPolicy: {}
...
谢谢
5条答案
按热度按时间66bbxpm51#
one case(GNU sed)
然而,这可能不是通用的。
lb3vh1jj2#
使用任何POSIX awk:
上面假设
image:
总是在imagePullPolicy:
之前,就像你发布的例子一样。fhg3lkii3#
使用GNU
sed
9rygscc14#
首先,修复
YAML
第9行:image: ngnix: latest
=〉image: nginx:latest
(2个错误)。固定输入:
使用正确的
YAML
解析器,yq
:来自jq@libera.irc的emanuele6
Online Demo
输出
编辑
inplace
,可以使用-yi
。ttcibm8c5#
非常简单的sed,假设唯一的
IfNotPresent
字符串是你想要替换的image: ngnix
到imagePullPolicy
的行:换句话说,找到特定的行范围,然后在该
/START/,/END/
范围内进行最简单的替换