2016-11-30 135 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