Я использую команду
sed -i "s/01.00.*/${version}/g" file.json
Результат: "${version}
Ожидаемая "${version}"
Пример:
"params": { "pipeline_branch":"master", "git_repo_url":"blah.git", "ARTIFACTORY_TAR_VERSION" : "01.00.00.26" }
Я хочу иметь возможность sed и заменить значение 01.00.00.26 (или любое значение 01.00. *, Которое постоянно меняется, как правило, версия pom) значением “$ {version}”, которое извлекается и пропускается через оболочку.
Я собираюсь запустить это в Linux через работу Дженкинса. Команда sed
я использую, работает (почти) отлично, но убрала двойную кавычку в последней.
Проблема с вашей командой sed в том, что она слишком сильно совпадает. Давайте посмотрим на шаблон, а затем разбить его:
/01.00.*/
01 # exact match (so far, so good) . # any character (too generous) 00 # exact match .* # the rest of the line
То, что мы хотим соответствовать, это 01.00.
с последующим любым количеством цифр и точек:
/01\.00\.[.0-9]*/
Обратите внимание, что мы используем \.
чтобы соответствовать точкам, а не .
который соответствует любому отдельному символу.
Соответствующая строка это
"ARTIFACTORY_TAR_VERSION" : "01.00.00.26"
Есть несколько вариантов: вам может потребоваться, чтобы в строке появилось "ARTIFACTORY_TAR_VERSION"
, а затем подставить что-то, похожее на номер версии, или вы могли бы быть менее осторожным и просто заменить все, что похоже на номер версии.
Эта опция заменит все, что похоже на номер версии, который содержит 01.00.
и сопровождается цифрами и точками:
sed -i "s/01\.00\.[0-9.]*/${version}/g" file.json
Это заставляет шаблон ограничиваться двойными кавычками (обратите внимание, что я переключаю середину RE через защиту с одинарными кавычками на двойные кавычки от оболочки, интерпретирующей шаблон):
sed -ri 's/(")[[:digit:].]*"/'"\1${version}\1/g" file.json
Этот последний также требует, чтобы шаблон соответствовал только строкам, содержащим слово VERSION
где-то в них:
sed -ri '/VERSION/s/(")[[:digit:].]*"/'"\1${version}\1/g" file.json
Не забывайте, что для тестирования вам не обязательно изменять файл на месте . Вы можете опустить флаг -i
и проверить вывод, не изменяя исходный файл.
sed -i “s / 01.00. * \” / \ $ {версия} \ “/ g” file.json
Поиск строки до – s / 01.00. * \ “/ Заменить на – / $ {version} \” /