根据 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
来识别设置。我在下面试过了。
我的逻辑:如果 _PROJECT
是 xyz
我试图用空行替换 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 命令将所有文件复制到新目录?
如何根据python中的多个条件对excel文件进行重复数据删除?