У меня есть вопрос jq. Дан файл file.json, содержащий:
[
{
"type": "A",
"name": "name 1",
"url": "http://domain.com/path/to/filenameA.zip"
},
{
"type": "B",
"name": "name 2",
"url": "http://domain.com/otherpath/to/filenameB.zip"
},
{
"type": "C",
"name": "name 3",
"url": "http://otherdomain.com/otherpath/to/filenameB.zip"
}
]
Я хочу создать другой файл, используя jq с измененным URL-адресом, только если значение URL-адреса соответствует некоторому шаблону. Например, я хотел бы обновить любой URL-адрес, соответствующий шаблону:
http://otherdomain.com.*filenameB.*
в некоторую фиксированную строку, такую как:
http://yetanotherdomain.com/new/path/to/filenameC.tar.gz
с полученным json:
[
{
"type": "A",
"name": "name 1",
"url": "http://domain.com/path/to/filenameA.zip"
},
{
"type": "B",
"name": "name 2",
"url": "http://domain.com/otherpath/to/filenameB.zip"
},
{
"type": "C",
"name": "name 3",
"url": "http://yetanotherdomain.com/new/path/to/filenameB.tar.gz"
}
]
Я так и не смог найти URL-адрес, не говоря уже об его обновлении. Это то, что я получил (неправильные результаты и не помогают мне с проблемой обновления):
% cat file.json | jq -r '.[] | select(.url | index("filenameB")).url'
http://domain.com/otherpath/to/filenameB.zip
http://otherdomain.com/otherpath/to/filenameB.zip
%
Любые идеи о том, как получить путь к ключу, который имеет значение, соответствующее регулярному выражению? И как после этого обновить ключ каким-нибудь новым строковым значением? Если есть несколько совпадений, все они должны быть обновлены одним и тем же новым значением.