gpt4 book ai didi

regex - sed:更改 .yml 文件中环境属性的值

转载 作者:行者123 更新时间:2023-11-29 08:49:34 25 4
gpt4 key购买 nike

我有一个配置应用程序环境属性的 .yml 文件,如下所示:

env1:
:prop1: "value1"
:prop2: "value2"
...
:propn: "valuen"

env2:
:prop1: "value1"
:prop2: "value2"
:prop3: "value3"
...
:propn: "valuen"

...

envn:
:prop1: "value1"
:prop2: "value2"
...
:propn: "valuen"

我想生成一个具有以下界面的 bash 脚本:

$ change_env.sh <environment> <property> <new value> <file.yml>

例子:

$ change_env.sh env2 prop3 "this value was changed" file.yml

输出将是:

env1:
:prop1: "value1"
:prop2: "value2"
...
:propn: "valuen"

env2:
:prop1: "value1"
:prop2: "value2"
:prop3: "this value was changed"
...
:propn: "valuen"

...

envn:
:prop1: "value1"
:prop2: "value2"
...
:propn: "valuen"

我找到了这篇文章,但是我无法为我的案例工作。 Replace an XML element's value? Sed regular expression?

我也试过这个:(它失败了,因为改变了所有属性)

sed 's/\(:pro3:\).*/\1 "new value"/'

提前致谢!-- 洛伦索。

最佳答案

(非常好的第一篇文章!)

试试这个

cat change_env.sh

#!/bin/bash
# spec : change_env.sh <environment> <property> <new value> <file.yml>

case ${#} in [!4] )
echo "usage: change_env.sh <environment> <property> <new value> <file.yml>" 1>&2
exit 1
;;
esac

env="$1" prop="$2" new="$3" file="$4"
bakFile="${file}".bak
mv "$file" "$bakFile"
sed '/^'"${env}"'/,/^[ ]*$/{ # [ spaceChar tabChar ]
/'"${prop}"'/s/\('"${prop}"'\)\(.*$\)/\1'"${new}"'/
}' "$bakFile" > "$file"

编辑

请注意,如果您希望输入的值中包含空格,您需要修改脚本以引用所有变量(“$1”、“$2”...)。 (我现在已经这样做了,因为这是 shell 脚本的最佳实践)。

/env/,/^[{space,tab}]*$/是 sed 的范围地址。它读取包含您的环境设置的文本 block 。我假设您的示例输入是正确的,并且每个环境都由一个空行分隔。嗯...这将包括文件中的最后一个。

** 编辑**

感谢@posdef 指出了这个答案的一些问题。更新代码以解决特定情况。

即使在修复之后,我确实注意到给定一个输入

   change_env.sh env2 prop2 "new value" file.yml

相关输出是

     :prop2new value

所以,没有额外的硬编码 :和空格字符替换,这意味着你需要非常详细地调用 <property>值与 <new value> ,即

   change_env.sh env2 ":prop2: " "\"new value\"" file.yml
# note extra cruft-^^-----^^^--^^---------^^--------------

相关输出

env2:
:prop1: "value1"
:prop2: "new value"
:prop3: "value3"
...
:propn: "valuen"

健康教育

关于regex - sed:更改 .yml 文件中环境属性的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5723464/

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