sed найдите 01.00. * и замените на $ {version}

Я использую команду

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} \” /