Как удалить лишние кавычки вокруг строки в файле Json в сценарии оболочки - PullRequest
0 голосов
/ 04 февраля 2019

Я хочу удалить лишнюю кавычку из приведенного ниже Json

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

Для этого я использую команду sed:

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

Однако она не работает должным образом, посколькузначения для address и dept - это просто пустая строка "", и я не хочу заменять их только одной ", что будет новой синтаксической ошибкой JSON.Я хочу заменить только двойные двойные кавычки вокруг полей, которые содержат фактическое значение.Поэтому я попытался

sed -i -e 's/\""[a-z]+[0-9]+[.-]+\""/"[a-z]+[0-9]+[.-]+\"/g' file.json 

, но он тоже не работает.

Как мне этого добиться?

1 Ответ

0 голосов
/ 04 февраля 2019

Предполагая, что ключи и значения не содержат экранированных запятых или двойных кавычек:

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

[^",] соответствует любому символу, но " и ,, \+ означают один или несколько символов.заключив его в экранированные скобки (\(\)), заполняет группу захвата 1 (\1 в строке замены раскрывается до нее).Таким образом, ""\([^",]\+\)"" соответствует двум двойным кавычкам, за которыми следует один или несколько символов, которые не являются запятыми или двойными кавычками, за которыми следуют две двойные кавычки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...