2016-11-30 178 views
4

有人可以在Jenkins groovy腳本中爲我逃脫這個sed shell命令嗎?jenkins escape sed命令

太難了。

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

([與Groovy和SED命令變量替換字符串]的可能的複製http://stackoverflow.com/questions/ 40878024 /使​​用groovy和sed命令替換字符串變量) – doelleri

回答

4

三重雙引號(""")字符串文本語法允許可變/表達式替換(內插),因此反斜槓(\)被解釋爲一個特殊字符「逃逸」。由於第一個開放paren不是一個特殊字符,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文件中用所需的值替換佔位符值)。

下面我們展示了一個詹金斯管道的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