2017-01-11 2 views
0

Я получил это: JSONЛучший способ получить номер из файла JSON (кроме JQ)

# coverage/.last_run.json 
{ 
    "result": { 
    "covered_percent": 100.0 
    } 
} 

Я хочу, чтобы получить не-округлой целое число (в данном случае, 100) для ключа covered_percent , Я не хочу использовать jq, ruby, python, perl и т. Д., Просто простые инструменты unix, которые поставляются на стандартной установке ubuntu. До сих пор у меня есть следующее:

grep -o '"covered_percent":.*[0-9]*' coverage/.last_run.json | sed 's/"covered_percent": //g' | sed 's/\.[0-9]*//g' 

Как я могу сделать это лучше?

+5

Пожалуйста, напиши «Стандартный Unix инструменты не подходят для обработки JSON «сто раз на доске». _Используйте нужный инструмент для задания. – chepner

+0

'i = 1; while [[$ i -le 100]]; do echo «Стандартные инструменты Unix не подходят для обработки JSON»; пусть i = i + 1; done' –

ответ

1

Ну, если вы действительно не хотите использовать jq, AWK может быть ответом:

$ awk '/covered_percent/ {print substr($0,match($0,/[0-9]+/),RLENGTH)}' file 
100 

Сериализация grep S также может сделать трюк:

$ grep covered_percent file | grep -o [1-9][0-9]* | head -1 

head нужен как для 99.99grep -o возвращается:

99 
99 

Оба решения как таковые сбой для входов < 1, например .9, и печать 9. Это можно зафиксировать, добавив regexen с [^.].

Но помните, что стандартный Unix инструменты не подходят для обработки JSON, стандарт Unix инструменты не подходят для обработки JSON, стандарт Unix инструменты не подходят для обработки JSON, ...

+0

Спасибо! Да, есть определенно лучшие инструменты для работы, и я буду использовать один из них для реальной задачи. Я работаю над улучшением сценариев оболочки, и это показалось мне хорошим академическим упражнением. –

Смежные вопросы