Как извлечь часть строкового значения в объекте json, используя парсер jq - PullRequest
0 голосов
/ 08 декабря 2018

У меня есть файл JSON, который содержит массив объектов.Мне нужно извлечь их в файл через запятую.Однако есть одно из значений (шифр), которое имеет несколько значений, разделенных пробелами.Мне нужно извлечь (разобрать) их в два формата: 1) Каждое значение, разделенное запятой.

2) Только первое значение перед первым пробелом.

Мой файл json содержит:

[{ "host": "xys.com", "ip": "0.20.0.4", "port": 222, "cipher": "ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH     Au=RSA  Enc=AESGCM(128) Mac=AEAD"}]

Я использую эту команду jq:

cat test.json | jq -r '.[] | "\(.host),\(.ip),\(.cipher)"' > test_parsing.txt

, которая дает мне:

xys.com,0.20.0.4,TLSv1.2,ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH     Au=RSA  Enc=AESGCM(128) Mac=AEAD

Что яwant - это две формы:

1) Разделяйте значения шифра запятыми и, если есть знак =, возьмите то, что следует после него:

xys.com,0.20.0.4,TLSv1.2,ECDHE-RSA-AES128-GCM-SHA256,TLSv1.2,ECDH,RSA,AESGCM(128),AEAD

2) Извлеките только первоечасть значения cipher:

xys.com,0.20.0.4,TLSv1.2,ECDHE-RSA-AES128-GCM-SHA256

Как извлечь два формата из файла mu json?

1 Ответ

0 голосов
/ 08 декабря 2018

Существует небольшое несоответствие между данным вводом JSON, заявленными требованиями и ожидаемым выводом, поэтому я сосредоточусь на требованиях и заданном вводе.

(1)

.[]
| .cipher |= gsub(" *(?<x>[A-Za-z]+)=(?<y>[^ ]+)"; "," + .y)
| .cipher |= (split(" |,") | join(","))
| "\(.host),\(.ip),\(.cipher)"

производит

xys.com,0.20.0.4,ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2,ECDH,RSA,AESGCM(128),AEAD

(2)

.[]
| .cipher |= (split(" ")[0])
| "\(.host),\(.ip),\(.cipher)"

производит

xys.com,0.20.0.4,ECDHE-RSA-AES128-GCM-SHA256
...