Извлеките значение json с помощью sed - PullRequest
3 голосов
/ 10 апреля 2019

У меня есть результат json, и я хотел бы извлечь строку без двойных кавычек

{"value1":5.0,"value2":2.5,"value3":"2019-10-24T15:26:00.000Z","modifier":[]}

С помощью этого регулярного выражения я могу правильно извлечь значение 3 (019-10-24T15: 26: 00.000Z)

sed -e 's/^.*"endTime":"\([^"]*\)".*$/\1/'

Как мне извлечь результат "value2", строку без двойных кавычек?

Мне нужно сделать с sed, поэтому я не могу установить jq. Это моя проблема

Ответы [ 3 ]

3 голосов
/ 10 апреля 2019

С GNU sed для -E для включения ERE:

$ sed -E 's/.*"value3":"?([^,"]*)"?.*/\1/' file
2019-10-24T15:26:00.000Z

$ sed -E 's/.*"value2":"?([^,"]*)"?.*/\1/' file
2.5

С любым POSIX sed:

$ sed 's/.*"value3":"\{0,1\}\([^,"]*"\{0,1\}.*/\1/' file
2019-10-24T15:26:00.000Z

$ sed 's/.*"value2":"\{0,1\}\([^,"]*"\{0,1\}.*/\1/' file
2.5

Выше предполагается, что у вас никогда не будет запятых внутри строк в кавычках.

1 голос
/ 10 апреля 2019

Просто запустите jq a JSON-процесс командной строки r

$ json_data='{"value1":5.0,"value2":2.5,"value3":"2019-10-24T15:26:00.000Z","modifier":[]}'
$ jq '.value2' <(echo "$json_data")
2.5

с ключом .value2 для доступа к интересующему вас значению.

Эта ссылка обобщает, почему вы должны НЕ использовать, регулярное выражение для анализа json (то же самое касается XML / HTML и других структур данных, которые находятся в теория может быть бесконечно вложенной)

Regex для разбора одного ключа: значения из JSON в Javascript

Если у вас нет jq в наличии:

вы можете использовать следующую команду GNU grep:

$ echo '{"value1":5.0,"value2":2.5,"value3":"2019-10-24T15:26:00.000Z","modifier":[]}' | grep -zoP '"value2":\s*\K[^\s,]*(?=\s*,)'
2.5

с использованием регулярного выражения, детализированного здесь:

"value2":\s*\K[^\s,]*(?=\s*,)

демо: https://regex101.com/r/82J6Cb/1/

Это будет работать, даже если json не линеаризован !!!!

С python это также довольно прямолинейно, и вы должны установить его по умолчанию на свою машину, даже если это не python3, он должен работать

$ cat data.json 
{"value1":5.0,"value2":2.5,"value3":"2019-10-24T15:26:00.000Z","modifier":[]}
$ cat extract_value2.py 
import json

with open('data.json') as f:
    data = json.load(f)
    print(data["value2"])
$ python extract_value2.py 
2.5
0 голосов
/ 14 апреля 2019

если ваши данные в файле 'd', попробуйте gnu sed

sed -E 's/[{,]"\w+":([^,"]+)/\1\n/g ;s/(.*\n).*".*\n/\1/' d
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...