Как изменить значение в файле .spec с помощью sed? Хотите изменить значение сборки $nmatch
на другое значение, скажем, "build1.1"
.
{
"files": [
{
"aql": {
"items.find": {
"repo": {"$eq":"app-java-repo"},
"path": "archives/test/app",
"type": "folder",
"$or": [
{
"$and": [
{
"name": {"$nmatch" : "*build*"} //change value using sed
}
]
}
]
}
}
}
]
}
Пробовал команду ниже, но не работает
sed -i -e '/name:/{s/\($nmatch\).*/\1: "'"build1.1"'" /}'
Формат вашего документа — json, поэтому для редактирования следует использовать jq:
jq '.files[0].aql."items.find"."$or"[0]."$and"[0].name."$nmatch" = "build1.1"' spec
С сед вы не можете надежно получить доступ к узлу с правильным именем. Ваш код не работает, потому что вы не включили кавычки вокруг name
в свой шаблон поиска. Использовать sed можно, если у вас есть уникальный идентификатор для строить. Пример:
sed -i 's/BUILD_NUMBER/build1.1/g' spec
Более «косвенный» способ — просто установить все с помощью $nmatch
:
jq '(.. | select(has("$nmatch"))? ) = "build1.1"' input.json
Как сохранить в файл?
добавить > output.json
в командную строку
Я думаю, я пойду с jq