Я хочу написать bash-скрипт для цикла по массиву «certs». Я прочитал, что могу использовать пакет jq
для правильного разбора json, но я не хочу использовать какой-либо пакет. Есть ли еще какой-нибудь изящный способ справиться с этим, пожалуйста?
response = {
"name": "Test",
"certs": ["BSc", "MSc"]
}
Вы можете использовать sed
для создания списка содержимого массива с помощью:
sed '/certs/!d;s/[^[]*\[//;s/,//;s/\]$//'
Выбирает строку, содержащую строку «certs», и удаляет из нее все, кроме строк в массиве. Вы можете использовать команду подстановки, чтобы вставить этот список, например, в. цикл for
:
for i in $(<json sed '/certs/!d;s/[^[]*\[//;s/,//;s/\]$//')
do echo "$i"
done
Это зацикливает элементы, печатающие каждый из них на новой строке.
Альтернативой sed
является grep
для извлечения списка и tr
для удаления запятых:
grep -oP 'certs": \[\K.*(?=])' | tr -d ,
Предоставленный вами пример текста сохраняется в файле с именем «JSON».
$ for i in $(<json sed '/certs/!d;s/[^[]*\[//;s/,//;s/\]$//'); do echo "$i"; done
"BSc"
"MSc"