shell 如何使用yq和“---”分隔符索引yaml文件

cnh2zyt3  于 2023-06-24  发布在  Shell
关注(0)|答案(1)|浏览(219)

下面是一个示例yaml文件来解释这个问题:

hello: null
---
hello: null

在yaml文件中有两个同名的键,用“---”分隔。两者需要不同的价值观。
我在bash脚本中使用yq来设置某些键的值。我目前正在对一个没有“---”分隔符的yaml文件使用这个命令,它可以工作:

yq -i -y ".hello=\"world\"" ./$PATH

但是当我尝试用“---”索引文件中的一个键时,使用:

yq -i -y ".[0].hello=\"world\"" ./$PATH

我得到这个错误:

jq: error (at <stdin>:1): Cannot index object with number
jq: error (at <stdin>:2): Cannot index object with number

我确信语法是不正确的,但我似乎不能让它工作或找到任何文档对这个特定的问题,我面临的。

ix0qys7i

ix0qys7i1#

请指定您正在使用的yq的which implementation
对于mikefarah/yq,您可以使用document_index(或di)到reference into a specific document

yq 'select(document_index == 0).hello = "world"'
# or
yq 'select(di == 0).hello = "world"'

对于kislyuk/yq,可以使用--slurp(或-s)标志将文档收集到一个数组中,然后可以索引到该数组中,然后迭代项目以重新生成多文档输出:

yq --slurp -y '.[0].hello = "world" | .[]'
# or
yq -sy '.[0].hello = "world" | .[]'

两个示例输出:

hello: world
---
hello: null

相关问题