我有一个像下面这样的yaml文件。
test:
test_1:
fact_1: Present
fact_2: value_1
tag: tagvalue
test_2:
fact_1: NotPresent
fact_2: null
tag: null
test_3:
fact_1: Present
fact_2: value_2
tag: 1.1
fact_3: 60
test_4:
fact_1: Present
fact_2: value_3
tag: 5.1
我想更新这个yaml文件中test_1节下的标记。请注意,我不知道该标记的当前值,也不知道这个yaml文件中键的确切位置和顺序。这也是我完整的yaml文件的一个子部分。
我已经尝试使用正则表达式来识别这个标记值,然后使用sed命令更新文件。
sed -i 's/(stest_1:[sS]*?tags*:s*)(S+)/1new_tag/' test.yaml
当我单独测试正则表达式时,它识别了test_1部分。但是当我执行上面的sed命令时,它不会改变任何东西。我能知道有什么问题吗?
sed
不是YAML
解析器,而是一个面向文本行的工具。
With Python or goyq
:
$ yq '.test.test_1.tag="new_tag"' file.yaml
{
"test": {
"test_1": {
"fact_1": "Present",
"fact_2": "value_1",
"tag": "new_tag"
},
"test_2": {
"fact_1": "NotPresent",
"fact_2": null,
"tag": null
},
"test_3": {
"fact_1": "Present",
"fact_2": "value_2",
"tag": 1.1,
"fact_3": 60
},
"test_4": {
"fact_1": "Present",
"fact_2": "value_3",
"tag": 5.1
}
}
}