我有一个巨大的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)”将是先使用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/

10-16 20:40