@vlarkanov

Как извлечь подстроку из строки при помощи grep?

Есть полученная curl строка:
{"jsonrpc":"2.0","result":[{"groupid":"63","name":"1voda","internal":"0","flags":"0"}],"id":1}

Как из нее получить значение ключа groupid - т. е. число 63?
Сделал через cut, но очень громоздко и некрасиво.
  • Вопрос задан
  • 303 просмотра
Решения вопроса 2
echo '"{"jsonrpc":"2.0","result":[{"groupid":"63","name":"1voda","internal":"0","flags":"0"}],"id":1}"' | cut -d\" -f11
:

Громоздко?

А лучше так:
echo '{"jsonrpc":"2.0","result":[{"groupid":"63","name":"1voda","internal":"0","flags":"0"}],"id":1}' | jq -r '.result[0].groupid'
:


P.S. вообще, с jrpc сервером проще работать jrpc клиентом, из того же питона. Да даже если и не использовать реализацию jrpc клиента. У вас же тут может вернуться массив результатов.
Ответ написан
Комментировать
Radjah
@Radjah
По идее это надо через jq делать. https://stedolan.github.io/jq/
JSON тут парсится как структурированные данные, а не как текст.

$ echo '{"jsonrpc":"2.0","result":[{"groupid":"63","name":"1voda","internal":"0","flags":"0"}],"id":1}'|jq .result[0].groupid
"63"
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
qlkvg
@qlkvg
python backend developer
Для коллекции

echo "{"jsonrpc":"2.0","result":[{"groupid":"63","name":"1voda","internal":"0","flags":"0"}],"id":1}" | grep -oP "(?<=groupid:)[0-9]*"
Ответ написан
Комментировать
saboteur_kiev
@saboteur_kiev Куратор тега Linux
software engineer
Как из нее получить значение ключа groupid - т. е. число 63?

Примеры для MYSTRING:
MYSTRING='{"jsonrpc":"2.0","result":[{"groupid":"63","name":"1voda","internal":"0","flags":"0"}],"id":1}'

awk
echo "$MYSTRING"|awk -F\" '{print $10}'

grep
echo "$MYSTRING"|grep -oP "groupid\":\"\K\d*"

jq
echo "$MYSTRING"|jq -r ".result[].groupid"

variable expansion
TMP="${MYSTRING#*groupid\":\"}";echo "${TMP%%\"*}"

cut
echo $MYSTRING|cut -d\" -f 10
Ответ написан
Комментировать
@Educated
echo '{"jsonrpc":"2.0","result":[{"groupid":"63","name":"1voda","internal":"0","flags":"0"}],"id":1}' | grep -oP '(?<=groupid":")\d+'
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы