Контент, возвращаемый из сервиса, подобен JSON.
Вы можете сделать это JSON с помощью нескольких шагов sed. Как только вы это сделаете, вы можете использовать синтаксический анализатор командной строки JSON, например jq для его анализа.
Метки (текст перед двоеточиями) должны быть в кавычках:
sed -E 's/(\s*[a-zA-Z]+)\s*:/"\1":/g'
Нецифровые значения (текст после двоеточий) также должны быть заключены в кавычки:
sed -E 's/:\s*([a-zA-Z]+)\s*/:"\1"/g'
Соединяя это с вашими входными данными, вы получаете этот конвейер:
echo '[{name:dany,class:4,Subjects:5,maths:yes,science:yes,EVS:no},{name:Ane,class:5,Subjects:6,maths:yes,science:yes,EVS:Yes},{name:mike,class:5,Subjects:1,maths:yes,science:no,EVS:no}]' |
sed -E 's/(\s*[a-zA-Z]+)\s*:/"\1":/g' |
sed -E 's/:\s*([a-zA-Z]+)\s*/:"\1"/g'
После этого вы можете получить JSON, который может анализировать такой инструмент, как jq:
[{"name":"dany","class":4,"Subjects":5,"maths":"yes","science":"yes","EVS":"no"},{"name":"Ane","class":5,"Subjects":6,"maths":"yes","science":"yes","EVS":"Yes"},{"name":"mike","class":5,"Subjects":1,"maths":"yes","science":"no","EVS":"no"}]
jq может создать отчет с разделением запятыми, используя это:
jq '.[] | "\(.name),\(.Subjects),\(.evs)"' --raw-output
.[]
проходит через массив, объект за объектом ([...]
- это массив JSON, {...}
- это объект JSON)
"\(.name)"
извлекает поле «имя» из текущего объекта и выводит его
|
объединяет несколько этапов команд jq (пример: .[] | .name
выводит поле имени каждого объекта)
| "\(.name),\(.Subjects),\(.evs)
выводит строку с полями name, Subjects и evs, разделенными запятыми.
Это приведет к выводу:
dany,5,null
Ane,6,null
mike,1,null
Весь конвейер, который соединяет это:
echo '[{name:dany,class:4,Subjects:5,maths:yes,science:yes,EVS:no},{name:Ane,class:5,Subjects:6,maths:yes,science:yes,EVS:Yes},{name:mike,class:5,Subjects:1,maths:yes,science:no,EVS:no}]' |
sed -E 's/([a-zA-Z]+):/"\1":/g' |
sed -E 's/:([a-zA-Z]+)/:"\1"/g' |
jq '.[] | "\(.name),\(.Subjects),\(.evs)"' --raw-output