gpt4 book ai didi

bash - yq - 添加多行字符串

转载 作者:行者123 更新时间:2023-12-03 17:13:18 30 4
gpt4 key购买 nike

我正在使用 yq (类似于 jq 但用于 yaml 文件)。我的目标是做到以下几点。我有一个看起来类似于的证书文件

-------BEGIN CERTIFICATE-------
asdoqijepoqjwe1i49i120941p2j4omslasdajsdqweqwe
qwelqjwkasdlajsölkjasldkjakljsdlkjasdasdpiqwe
-------END CERTIFICATE--------

我有一个看起来像这样的 yaml 文件(在本例中为 Openshift 模板)
apiVersion: v1
kind: Template
objects:
- apiVersion: v1
kind: Route
tls:
certificate:
key:
someOther: stuff

现在我的目标是将证书注入(inject)到 yaml 中,以便输出看起来像这样
apiVersion: v1
...
certificate: |
-------BEGIN CERTIFICATE-------
asdoqijepoqjwe1i49i120941p2j4omslasdajsdqweqwe
qwelqjwkasdlajsölkjasldkjakljsdlkjasdasdpiqwe
-------END CERTIFICATE--------

然而,互联网搜索和文档都没有任何帮助。我得到的最接近的是使用

yq w /tmp/template.yaml objects[0].tls.certificate "\n$(cat cert.pem)"



给我以下输出
certificate: !!binary |
fC0KLS0tLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0tLQphc2RvcWlqZXBvcWp3ZTFpND
lpMTIwOTQxcDJqNG9tc2zDYXNkYWpzZMNxd2Vxd2UKcXdlbHFqd2vDYXNkbGFqc8O2bGtq
YXNsZGtqYWtsanNkbGtqYXNkYXNkcGlxd2UKLS0tLS0tLUVORCBDRVJUSUZJQ0FURS0tLS
0tLS0t

奇怪的是,我想添加的那个是 base64 编码的值,前面是 !!binary |。任何想法发生了什么以及如何实现我想要的输出?

最佳答案

请注意,在 bash 中,当您使用 '$(..)' 时,它会修剪尾随换行符(这就是为什么 yaml 字符串 block 以 |- 而不是 | 开头的原因。
获取 | (包括尾随的新行)您将需要:

IFS= read -rd '' output < <(cat cert.pem)
output=$output yq e '.objects[0].tls.certificate = strenv(output)' myfile.yml
免责声明:我写了 yq

关于bash - yq - 添加多行字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57761285/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com