根据 bash 中的条件删除 YML 文件中的属性

Posted

技术标签:

【中文标题】根据 bash 中的条件删除 YML 文件中的属性【英文标题】:Remove a property in a YML file based on a condition in bash 【发布时间】:2021-07-15 14:09:33 【问题描述】:

我有以下 bash 代码在 2 个环境中应用 YML 配置。

   cat "script/service.yml" \
  | sed -e "s/_REGISTRY_/$_REGISTRY/g" \
  | sed -e "s/_PROJECT_/$_PROJECT/g" \
  | $oc apply -f -

现在我需要更改它以停止在一个环境中应用某些属性。我有一个变量_PROJECT 来识别设置。我在下面试过了。

我的逻辑:如果 _PROJECTxyz 我试图用空行替换 YML 属性(删除属性)

 cat "script/service.yml" \
  | sed -e "s/_REGISTRY_/$_REGISTRY/g" \
  | sed -e "s/_PROJECT_/$_PROJECT/g" \
  | if [ "$_PROJECT" = "xyz" ]; then
  sed -e "s/^storage//g"
  fi \
  | $oc apply -f -

但是这段 bash 代码不起作用。如何更正这件作品以满足我的要求?

【问题讨论】:

你会失去理智尝试使用通常的 sed / awk 文本操纵器来操纵 yaml。看看github.com/mikefarah/yq 【参考方案1】:

能够想通。只需添加if else 块,如下所示。

if [ "$_PROJECT" = "xyz" ]; then
 cat "script/service.yml" \
  | sed -e "s/_REGISTRY_/$_REGISTRY/g" \
  | sed -e "s/_PROJECT_/$_PROJECT/g" \
  |sed -e "s/storage//g" \
  | $oc apply -f -
else
  cat "script/service.yml" \
  | sed -e "s/_REGISTRY_/$_REGISTRY/g" \
  | sed -e "s/_PROJECT_/$_PROJECT/g" \
  | $oc apply -f -  
fi

【讨论】:

以上是关于根据 bash 中的条件删除 YML 文件中的属性的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 yml 文件中的 bash 命令将所有文件复制到新目录?

SpringBoot 中从yml配置文件中读取常用的参数值

如何根据python中的多个条件对excel文件进​​行重复数据删除?

如何复制或删除bash中的特定行并将它们创建到新文件中[重复]

无法从启动应用程序中的多个 yml 文件加载属性

bash中的条件[重复]