如何在Shell脚本中删除Json文件中字符串周围的多余引号

时间:2019-02-04 05:44:35

标签: json shell sed

我想从下面的Json中删除多余的报价

{""id"":""1"", ""name"":""john"",""address"":"",""timestamp"":""2018/01/01 12:43:42 -700"",""dept"":""}

我正在为此使用sed命令:

sed -i -e 's/""/"/g' file.json

但是它不能按预期方式工作,因为addressdept的值只是空字符串"",我不想只用一个{{1 }},这将是一个新的JSON语法错误。我只想替换包含实际值的字段周围的双精度双引号。所以我尝试了

"

但它也不起作用。

我该如何实现?

1 个答案:

答案 0 :(得分:2)

假设键和值不包含转义逗号或双引号:

sed -i 's/""\([^",]\+\)""/"\1"/g' file

[^",]匹配除",之外的任何字符,\+表示一个或多个。将其括在转义括号(\(\))中会填充捕获组1(替换字符串中的\1会扩展到它)。因此,""\([^",]\+\)""匹配两个双引号,然后是一个或多个不是逗号或双引号的字符,然后是两个双引号。