#grep
#grep
Вопрос:
Команда:
grep -oP '(?<="name":")[^"]*|(?<="title":")[^"]*' *.json >newjson
o / p получает как,
10XANY10G_1.json:chMax
10XANY10G_1.json:Max Frequency in GHz
10XANY10G_1.json:up
10XANY10G_1.json:UP
10XANY10G_1.json:down
10XANY10G_1.json:DOWN
10XANY10G_1.json:CapabilityList
10XANY10G_1.json:Capabilities
10XANY10G_1.json:encoding
10XANY10G_1.json:Encoding
ожидаемый o / p:
chMax:"Max Frequency in GHz",
up:"UP",
down:"DOWN",
содержимое файла:
{"card":{"cardName":"10AN10G","portSignalRates":["10AN10G-1-OTU2","10AN10G-1-OTU2E","10AN10G-1-TENGIGE","10AN10G-1-STM64"],"listOfPort":{"10AN10G-1-OTU2":{"portAid":"10AN10G-1-OTU2","signalType":"OTU2","tabNames":["PortDetails"],"requestType":{"PortDetails":"PTP"},"paramDetailsMap":{"PortDetails":[{"type":"dijit.form.TextBox","name":"signalType","title":"Signal Rate","id":"","options":[],"label":"","value":"OTU2","checked":"","enabled":"false","selected":""},{"type":"dijit.form.TextBox","name":"userLabel","title":"Description","id":"","options":[],"label":"","value":"","checked":"","enabled":"true","selected":""},{"type":"dijit.form.Select","name":"Frequency","title":"Transmit Frequency",}}}}}}
Комментарии:
1. Я не вижу данных, которые вы хотели бы получить в файле. Нет
Max Frequency
, нетup
и т. Д2. Кроме того, практически нет смысла анализировать JSON с помощью grep.
3. ожидаемый ввод-вывод из приведенного выше файла: signalType: «Скорость сигнала», userLabel: «Описание», Frequecy: «Частота передачи»,
Ответ №1:
Я думаю, вы ищете это,
$ grep -oP '(?<="name":")[^"]*|(?<="title":)[^,]*' file
signalType
"Signal Rate"
userLabel
"Description"
Frequency
"Transmit Frequency"
Чтобы получить желаемый результат
$ grep -oP '(?<="name":")[^"]*|(?<="title":)[^,]*' file | paste -d: - -
signalType:"Signal Rate"
userLabel:"Description"
Frequency:"Transmit Frequency"
Ответ №2:
Я думаю, что ваша проблема в том, что вы объединяете две группы с помощью |
попробуйте удалить |
, и вы приблизитесь к тому, что ищете, но вам, возможно, придется добавить термин, чтобы пропустить любые промежуточные теги для случаев, когда name
и title
не сразу следуют друг за другом, тогда вам, возможно, придется поумнеть, чтобы разобраться со случаем, в котором есть запись с именем, но нет заголовка.
Как уже говорилось, grep не лучший инструмент для синтаксического анализа json, есть множество других — лично я бы посоветовал использовать python и библиотеку json для загрузки вашего файла, а затем вывести нужные вам теги.
Ответ №3:
Вот gnu awk
(из-за RS) версия для извлечения данных:
awk -F" '/title/ {print $3":"$7}' RS='name' file
signalType:Signal Rate
userLabel:Description
Frequency:Transmit Frequency