有人可以在Jenkins groovy脚本中为我逃脱这个sed shell命令吗?jenkins escape sed命令
太难了。
sh ("""
sed "s/(AssemblyInformationalVersion\(\")(.*)(\")/\1${productVersion}\3/g"
AssemblyInfoGlobal/AssemblyInfoGlobal.cs -r
""")
有人可以在Jenkins groovy脚本中为我逃脱这个sed shell命令吗?jenkins escape sed命令
太难了。
sh ("""
sed "s/(AssemblyInformationalVersion\(\")(.*)(\")/\1${productVersion}\3/g"
AssemblyInfoGlobal/AssemblyInfoGlobal.cs -r
""")
三重双引号("""
)字符串文本语法允许可变/表达式替换(内插),因此反斜杠(\
)被解释为一个特殊字符“逃逸”。由于第一个开放paren不是一个特殊字符,Groovy编译失败。如果你的意图是在结果字符串中有文字反斜杠,你需要跳过反斜杠。也就是说,使用双反斜杠(\\
)替换一个文字反斜杠。
因此:
sh ("""
sed "s/(AssemblyInformationalVersion\\(\\")(.*)(\\")/\\1${productVersion}\\3/g"
AssemblyInfoGlobal/AssemblyInfoGlobal.cs -r
""")
所以,如果要替换一些字符或单词中的字符串常规可变,例如为了更换“/”与“/”到转义一个特殊字符,在我们的例子中将是正斜杠,您可以使用下面的代码。
因此,之后我们将能够应用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
([与Groovy和SED命令变量替换字符串]的可能的复制http://stackoverflow.com/questions/ 40878024 /使用groovy和sed命令替换字符串变量) – doelleri