2016-11-30 10 views
4

Может ли кто-нибудь избежать этой команды sed shell в Jenkins groovy script для меня?jenkins escape sed command

Так сложно.

sh (""" 
sed "s/(AssemblyInformationalVersion\(\")(.*)(\")/\1${productVersion}\3/g" 
AssemblyInfoGlobal/AssemblyInfoGlobal.cs -r 
""") 
+0

Возможный дубликат [Замена строки с переменной с помощью Groovy и SED команды] (http://stackoverflow.com/questions/ 40878024/replace-string-with-variable-with-groovy-and-sed-command) – doelleri

ответ

4

Тройной двойные кавычки (""") строка символов синтаксиса позволяет переменной/выражения подстановки (интерполяция), так что обратный слэш (\) интерпретируется как специальный символ «Escape». Поскольку первый открытый палец не является таким особым символом, компиляция Groovy терпит неудачу. Если ваше намерение состоит в том, чтобы иметь буквальную обратную косую черту в полученной строке, вам нужно избежать обратных косых черт. То есть, используйте двойную обратную косую черту (\\), чтобы заменить один обратный косой черт.

Таким образом:

sh (""" 
sed "s/(AssemblyInformationalVersion\\(\\")(.*)(\\")/\\1${productVersion}\\3/g" 
AssemblyInfoGlobal/AssemblyInfoGlobal.cs -r 
""") 
+0

Работа с двойным обратным слэшем. Большое спасибо. – orange

+1

Проще всего использовать генератор snippen плагина. https://jenkins.io/doc/book/pipeline/getting-started/#snippet-generator – walla

+0

Согласовано. Или средства обработки текста на самом языке Groovy. – BalRog

1

Так что, если вы хотите заменить некоторые символы или слова в Строка заводной переменной, например заменяющего«/» с «/» для того, чтобы избегайте специального символа, который в нашем случае будет косой чертой, вы можете использовать приведенный ниже код.

Итак, после этого мы сможем применить команду linux sed, не получив ошибку (например, с помощью sed заменить значение владельца места на нужное значение в файле .env).

Ниже мы покажем Дженкинс Pipeline Groovy код:

 String s = "A/B/C" 
     your_variable = s.replace("/", "\\/") 
     sh "sed -i -e 's/string_to_replace/${your_variable}/g' path/to/file/.env" 

ПРИМЕЧАНИЕ:${your_variable} получит содержимое переменной.

ОБОСНОВАНИЕ:

echo "Your variable new content: ${your_variable}" 

РЕЗУЛЬТАТ:

Your variable new content: A\/B\/C