sed命令在多行中使用regex并替换json文件中的元素

时间:2016-01-28 06:48:42

标签: json regex linux sed

我有一个这样的文件:

test.json

{..
}
  "Naveen": {
   "ip_addr": "INET;192.168.1.3;5001",
   "enable": 1,
   "mode": "emulate"
  },

我需要匹配Naveen,然后是下一个元素mode,并将模式值从emulate更改为xyz

解决方案失败:

  1. sed '/^Naveen$/{$!{N;s/^Naveen\nemulate$/xyz\nBe/;ty;P;D;:y}}'
  2. cat test.json | tr '\n' '\r' | sed -e 's/Naveen\remulate/xyz\rBe/' | tr '\r' '\n'
  3. 我犯的错是什么?

2 个答案:

答案 0 :(得分:0)

您可以尝试此sed

sed '/"Naveen": {/{:loop; N; s/emulate/CHANGED/g; /}/b; b loop;}' yourfile.json

答案 1 :(得分:0)

这可能适合你(GNU sed):

sed '/"Naveen": {/,/},/{/mode/s/emulate/xyz/}' file

使用{...}之间的范围,然后专注于特定的字符串。

相关问题