1.Ваш пример JSON недопустим, а именно 0983012
- в спецификации JSON числовые значения не могут начинаться с 0
(ну, кроме самого нуля).Вы можете использовать https://jsoncompare.com/#!/simple/ для проверки вашего JSON (jq допускает такие числа, но это отклонение от спецификации)
2.Вопрос не связан с jq, это вопрос интерполяции.Сначала вам нужно правильно определить строку, например, так:
bash $ SEARCH='.[] | select(.notes[] | select(.body|contains("[SOMETEXT]")))'
, затем вы можете повторно использовать ее с помощью jq:
bash $ <file.json jq "$SEARCH"
{
"id": 729384872903,
"notes": [
{
"body": "Some more more normal text [SOMETEXT]",
"id": 983012
},
{
"body": "Some more more more normal text",
"id": 89023432
}
]
}
bash $
3.Кроме того, позвольте мне показать вам альтернативный подход с использованием jtc
утилита unix:
bash $ SEARCH="SOMETEXT"
bash $ <file.json jtc -w"<$SEARCH>R:[-3]"
{
"id": 729384872903,
"notes": [
{
"body": "Some more more normal text [SOMETEXT]",
"id": 983012
},
{
"body": "Some more more more normal text",
"id": 89023432
}
]
}
bash $