Sed替换上一行

时间:2017-02-15 04:09:28

标签: sed

我正在尝试替换字符串匹配的上一行。

示例json

  "test" : {
    "aa" : true,
    "ac" : "port",
    "tr" : "p2",
    "ll" : 90,
    "mp" : true
  }

如果“ll”等于90,我需要将前一行更改为“mu”:“p1”。我已经尝试了下面的sed但它总是替换相同的行而不是前一行。请建议

sed -e '/"ll" : 90/!b;!N;c"mu" : "p1"'

1 个答案:

答案 0 :(得分:1)

您可以试试sed

sed 'N;/\n *"ll" : 90/{s/^\([^"]*\).*\n/\1"mu" : "p1",\n/;};P;D' file

正如@potong所说,

sed -r 'N;s/.*(\n(\s*)"ll" : 90,)/\2"mu : "p1",\1/;P;D' file

输出:

"test" : {
  "aa" : true,
  "ac" : "port",
  "mu" : "p1",
  "ll" : 90,
  "mp" : true
}