sed命令中的Regex不能正常工作



我有一个像下面这样的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
}
}
}

相关内容

  • 没有找到相关文章

最新更新