Команда sed для изменения значения в файле .spec

Как изменить значение в файле .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"'" /}'
Как сделать HTTP-запрос в Javascript?
Как сделать HTTP-запрос в Javascript?
В JavaScript вы можете сделать HTTP-запрос, используя объект XMLHttpRequest или более новый API fetch. Вот пример для обоих методов:
0
0
50
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Формат вашего документа — 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

Я думаю, я пойду с jq

Kraj 16.05.2022 11:54

Более «косвенный» способ — просто установить все с помощью $nmatch:

jq '(.. | select(has("$nmatch"))? ) = "build1.1"' input.json 

Как сохранить в файл?

Kraj 17.05.2022 11:49

добавить > output.json в командную строку

A.H. 17.05.2022 20:35

Другие вопросы по теме