Sed将替换上一行

Sed将替换上一行,sed,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"' 您可以尝试此sed: sed 'N;/\n *"ll"

我试图替换字符串匹配的前一行

示例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"'

您可以尝试此
sed

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

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
}

您可以尝试此
sed

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

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
}

如果您展示完整的JSON对象,有人可以向您展示如何使用适当的JSON解析器(如jq)而不是像sed这样脆弱的东西来完成它。这里,建议您使用
JSON
感知工具,如
jq
来操作JSON文本文件。如果您展示了完整的JSON对象,有人可以向您展示如何使用适当的JSON解析器(如jq)而不是像sed这样的脆弱工具来操作。同意@BenjaminW。这里,建议使用
JSON
感知工具,如
jq
来操作JSON文本文件;s/*(\n(\s*)“ll”:90,)/\2“mu:”p1“,\1/;P;D”文件可以完成此任务。由于替换是匹配的一部分,因此需要一个单独的命令,可能是
sed-r'n;s/*(\n(\s*)“ll”:90,)/\2“mu:”p1“,\1/;PD'文件
可能会完成此任务。