使用 yq 编辑 yaml 文件--in-place,-i 标志 yq - Go 实现yq - Python 实现

问题描述

我对 yq 2.12.0 版的就地编辑标志有一个大问题。 我们正在尝试更新我们的 .yaml 脚本之一中变量的值。以前看起来像这样...

authentication:
  anonymous:
    enabled: false

但我们想要这个

authentication:
  anonymous:
    enabled: true

我们已经尝试运行

sudo yq -y ".authentication.anonymous.enabled |= true" sample.yml

但它会覆盖整个文件并使其变为空白:/ 我们目前的解决方法是运行

sudo yq -y ".authentication.anonymous.enabled |= true" sample.yml > newfile.yml
sudo cp newfile.yml sample.yml

所以基本上我们创建了我们想要的正确输出,但只是将它推送到一个文件中,然后将新内容复制到旧文件中(我知道这是一个完整的考验)。必须有更好的方法来完成此任务...有人可以告诉我如何正确使用 yq --in-place 标志编辑文件吗?

解决方法

yq - Go 实现

使用 yq,您可以就地编辑文件:

yq -i e '.authentication.anonymous.enabled |= true' sample.yml


yq - Python 实现

yq 不提供对 yaml 文件的就地编辑,并且可能永远不会这样做,因为它是 jq 的包装器。 您可以使用 sponge(GNU moreutils 的一部分)解决您的问题:

yq -y '.authentication.anonymous.enabled |= true' sample.yml | sponge sample.yml

请参阅 jq - FAQ(搜索“如何实现对 JSON 文件的“就地”编辑?)。