gpt4 book ai didi

linux - Sed 用正则表达式替换 json 文件内的内容

转载 作者:太空宇宙 更新时间:2023-11-04 05:07:15 24 4
gpt4 key购买 nike

我有一个巨大的 json 文件,我将复制其中的一部分:

"panels": [
"targets": [
{
"alias": "First Prod",
"dimensions": {
"Function": "robot-support-dev-create-human"
},
}
{
"alias": "Second Prod",
"dimensions": {
"Function": "robot-support-prototype-dev-beta-activate-human"
},
}
{
"alias": "third Prod",
"dimensions": {
"Function": "robot-support-dev-jira-kill-human"
},
}
{
"alias": "Somehting",


"dimensions": {
"Robotalias": "default",
"RobotName": "Robot-prod-prototype",
"Operation": "Fight"
},
]
]

我想在函数每次包含 robot-support-devrobot-support-prod-...

时对其执行正则表达式
sed -i ' s/"robot-support-([a-zA-Z0-9_]+)-dev-([^"]+)"/robot-support-\\1-prod-\\2/g;'

这就是我所做的,但我的正则表达式可能有问题

最佳答案

您无法将 json 与正则表达式匹配。 “正确的方法(TM)”是首先使用 jq 等 json 感知工具提取 Function,然后使用 sed 修改它,然后使用 json 感知工具将其插入回来。

Sed 默认使用 basic regex ,因此您需要将 ( ) + 更改为 \( \) \{1,\} (\+ 是 GNU 扩展),或者使用 GNU sed 只需使用 sed -E 来使用扩展正则表达式。此外,\\1 将被解释为 2 个字符 \1,您希望将 \1 与单个 \ 一起使用。但无论如何,您的正则表达式只是无效并且与您想要的不匹配(我猜)。此外,替换字符串右侧缺少 ",因此您的命令只会删除 "。只需替换您需要的内容即可,尝试:

sed 's/"robot-support-dev-/"robot-support-prod-/g;'

关于linux - Sed 用正则表达式替换 json 文件内的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59752862/

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