Регулярками JSON не режут, это дорога в один конец: сегодня прошло, завтра в описании товара встретилась фигурная скобка и всё поехало. Раз есть python3, он и будет твоим jq.
Короткая обёртка, кладётся в ~/bin/jsn:
#!/usr/bin/env python3
import sys, json
put = sys.argv[1].split('.') if len(sys.argv) > 1 else []
d = json.load(sys.stdin)
for k in put:
if k == '':
continue
d = d[int(k)] if k.isdigit() else d[k]
print(d if isinstance(d, str) else json.dumps(d, ensure_ascii=False))
Дальше в скрипте всё читается глазами:
otvet=$(curl -s https://example.org/obmen/zadanie/17)
id=$(printf '%s' "$otvet" | jsn zadanie.id)
sostoyanie=$(printf '%s' "$otvet" | jsn zadanie.sostoyanie)
echo "$id $sostoyanie"
Строк тут два десятка, ставить нечего, ломается только на битом JSON. И ломается громко, с трассировкой и ненулевым кодом возврата, что сильно лучше молчаливой пустой строки от sed.