我在sed中指定了“{”和“}”之间的地址空间,因此我希望只有第一个“Acer”被替换为“TTTT”。不需要第二个。我怎样才能解决这个问题?
我在Ubuntu 15.10上做了测试,sed版本是sed(gnused)4.2.2。
提前谢谢。

$ echo "
[
    {
        \"manufacturer\": \"Acer\",
        \"regularPrice\": 165.99,
    },
    [
        \"manufacturer\": \"Acer\",
        \"regularPrice\": 165.99,
    ],
    {
        \"manufacturer\": \"Acer\",
        \"regularPrice\": 165.99,
    }
]
" | sed "/{/,/},/ {s/\"Acer\"/\"TTTT\"/}"

其结果如下:
[
  {
    "manufacturer": "TTTT",
    "regularPrice": 165.99,
  },
  [
    "manufacturer": "Acer",
    "regularPrice": 165.99,
  ],
  {
    "manufacturer": "TTTT",
    "regularPrice": 165.99,
  }
]

最佳答案

这只适用于GNU sed

sed "/{/,/},/ {0,/\"Acer\"/ s/\"Acer\"/\"TTTT\"/}"

或者更准确地说,下面的方法也在起作用
sed "/{/,/},/ {0,/\"Acer\"/s//\"TTTT\"/}"

09-04 01:30