我有一个巨大的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-dev
到robot-support-prod-...
的函数上执行一个正则表达式sed -i ' s/"robot-support-([a-zA-Z0-9_]+)-dev-([^"]+)"/robot-support-\\1-prod-\\2/g;'
这是我所做的,但是我的正则表达式可能有问题
最佳答案
您无法将json与正则表达式匹配。 “正确的方法(TM)”将是先使用Function
之类的可识别json的工具提取jq
,然后使用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/