【发布时间】:2021-01-06 15:11:14
【问题描述】:
我现在一直在努力通过使用 sed 在新行中添加一个元素来更新一些 yaml 文件。
sed 命令(或其他 linux 命令)必须匹配一个字符串(image: 或 - image:),在新行中添加一个与前一行相同缩进的新元素。
问题是新行必须正好在字符串image: 下,而不是- image: 下。
示例:当 sed 匹配字符串 image 时,它会添加具有正确缩进的新行(就在 image 上方)
kind: DaemonSet
apiVersion: apps/v1
metadata:
name: calico-node
spec:
template:
spec:
containers:
- name: calico-node
image: myimage
imagePullSecret: mysecret
...
示例 2:当 sed 匹配字符串 - image 时,它会添加具有正确缩进的新行(在 image 上方而不是 - 上方):
kind: DaemonSet
apiVersion: apps/v1
metadata:
name: calico-node
spec:
template:
spec:
containers:
- image: myimage
imagePullSecret: mysecret
...
不想要的是
kind: DaemonSet
apiVersion: apps/v1
metadata:
name: calico-node
spec:
template:
spec:
containers:
- image: myimage
imagePullSecret: mysecret
我已经尝试过yq 命令来处理这个问题,但它是一个巨大的痛苦......
我在另一个线程中找到了此代码,但在匹配 - image 字符串时它不起作用。
sed '/^ *image: .*/ { G; s/^\( *\)image: .*/&\1imagePullSecret: mysecret/; }' sed.yaml
【问题讨论】:
标签: sed yaml indentation