Команда sed не работает в конвейере jenkins

У меня есть файл README.txt, который содержит строку -

"version": "1.0.0-alpha-test.7"

Используя конвейер Jenkins, я хочу заменить эту строку на

"version": "1.0.0-alpha-test.{BUILD_NUMBER}"

Следующая команда sed работает, когда я пробую ее в кластере Linux

sed -i -E "s#(\"version\"[ ]*:[ ]*\".+alpha-test\.)[0-9]+\"#\1${BUILD_NUMBER}#g" README.txt

Эта же команда не работает с использованием конвейера Jenkins.

Пытался выполнить следующий запрос, но он не работает -

sh """
sed -i -E "s|([\"]version[\"][ ]*:[ ]*[\"].+alpha-test\\.)[0-9]+\"|\1${BUILD_NUMBER}|g" README.txt
cat README.txt
"""

/home/jenkins/workspace/test/test-pipeline@tmp/durable-eb774fcf/script.sh: 3: /home/jenkins/workspace/test/test-pipeline@tmp/durable-eb774fcf/script.sh: Syntax error: ")" unexpected

Вы сказать, вы хотите {BUILD_NUMBER} на выходе, но ваш код пытается вставить ${BUILD_NUMBER} - что действительно должно появиться на выходе - текст {BUILD_NUMER} или значение переменной оболочки ${BUILD_NUMBER} или что-то еще?

Ed Morton 10.09.2018 15:28

Синтаксические ошибки на 99% вызваны неправильным или отсутствующим экранированием. Использование ЦИТАТЫ в ТРОЙНЫХ ЦИТАТАХ обычно сбивает вас с толку. Замените их одиночными галочками. " - ' для команды sed: sed -i -E 's|([\"]version[\"][ ]*:[ ]*[\"].+alpha-test\\.)[0-9]+\"|\1${BUILD_NUMBER}|g' README.txt cat README.txt

Onur Gokkocabas 11.09.2018 20:44
2
2
1 502
1

Ответы 1

Лучше вместо этого использовать команду perl ...

script{

old_version = (sh (returnStdout: true, script:'''old_version=`cat version.cfg |grep VERSION=|cut -d "=" -f2`
echo $old_version''')).toString().trim()

sh """

     if [ "$old_version" != $new_version ]; then
        perl -pi -e "s,$old_version,$new_version,g" version.cfg
        ##-- git push operation --##
     fi  

"""

}

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

Sed - обращение с использованием двух строк
Можно ли заменить новую строку и другой символ одной вкладкой с помощью sed?
Как добавить пробел после запятой, если его нет в 6-м столбце файла csv?
Как использовать sed, cut или awk, чтобы глобально обрезать 10-й столбец до 30 символов, но пропуская заголовок, а затем добавить пробел плюс 3 точки?
Заменить строку на место другой строкой, если строка соответствует точно другой строке с помощью sed
Замена квалификатора данных в двойных кавычках с помощью sed, awk или perl
Я хотел бы напечатать одну и ту же строку перед каждой строкой с помощью sed или awk
Как выровнять столбец из файла csv с помощью инструмента awk
Извлечь совпадающую группу между косыми чертами с помощью sed, перерывы grep для специальных символов
Как заменить или прокомментировать двойные кавычки в csv-файле, если перед двойными кавычками стоит число