Jenkins 如何在单引号之间使用sed?

Jenkins 如何在单引号之间使用sed?,jenkins,groovy,Jenkins,Groovy,我有一些简短的脚本,如下所示: 这是在groovy命令中执行bash的一种方法 sh (script: 'printf "${INFO} | sed 's/^[^\/]*://g'"',returnStdout: true).trim() INFO的值是test/word/fine 使用上面的脚本,我想“删除”所有内容,直到(包括)第一个/。我不能让它与单引号之间的单引号工作。如果有效,我可以检查我的\/是否有效。解决方案1:下面的简单sed可能会对您有所帮助 echo "test/word/

我有一些简短的脚本,如下所示: 这是在groovy命令中执行bash的一种方法

sh (script: 'printf "${INFO} | sed 's/^[^\/]*://g'"',returnStdout: true).trim()
INFO
的值是
test/word/fine

使用上面的脚本,我想“删除”所有内容,直到(包括)第一个
/
。我不能让它与单引号之间的单引号工作。如果有效,我可以检查我的
\/
是否有效。

解决方案1:下面的简单
sed
可能会对您有所帮助

echo "test/word/fine" | sed 's/\([^/]*\)\/\(.*\)/\2/'
解决方案2:无需使用
sed
使用bash参数扩展:

var="test/word/fine"
echo "${var#*/}"
word/fine
解决方案1:以下简单的
sed
可能会对您有所帮助

echo "test/word/fine" | sed 's/\([^/]*\)\/\(.*\)/\2/'
解决方案2:无需使用
sed
使用bash参数扩展:

var="test/word/fine"
echo "${var#*/}"
word/fine

显然,Groovy允许使用三重引号,因此不必强制命令使用单引号(sic)

请注意
printf
命令中双引号的位置。更好的解决方案是说
printf“%s'${INFO}”
但是。。。您真的需要shell来插值变量
INFO
,如果需要,为什么不简单地执行
sh'echo“${INFO}*/}”

如果您确实只希望替换第一次出现的,那么
/g
标志是多余的,因此我将其取出。您的正则表达式被锚定到字符串的开头,因此它只能找到一个匹配项进行替换,但如果说“替换一行中的所有匹配项”,显然这并不是您想要的,那么这充其量只是误导和混淆

如果您的测试数据确实不包含冒号,那么您的正则表达式中的冒号是错误的,所以我也去掉了冒号


通常,我们使用不同的分隔符,如
s%^[^/]*/%%
,这样我们就不必在
sed
替换中使用反斜杠转义斜杠。

显然Groovy允许您使用三重引号,这样就不必强制命令使用单引号(sic)

请注意
printf
命令中双引号的位置。更好的解决方案是说
printf“%s'${INFO}”
但是。。。您真的需要shell来插值变量
INFO
,如果需要,为什么不简单地执行
sh'echo“${INFO}*/}”

如果您确实只希望替换第一次出现的,那么
/g
标志是多余的,因此我将其取出。您的正则表达式被锚定到字符串的开头,因此它只能找到一个匹配项进行替换,但如果说“替换一行中的所有匹配项”,显然这并不是您想要的,那么这充其量只是误导和混淆

如果您的测试数据确实不包含冒号,那么您的正则表达式中的冒号是错误的,所以我也去掉了冒号


通常,我们使用不同的分隔符,如
s%^[^/]*/%%
,这样我们就不必在
sed
替换中使用反斜杠转义斜杠。

谢谢,我将对此进行投票,但我仍然需要在开始时在printf的单引号之间使用此分隔符。@DenCowboy,你能详细说明你想要实现什么吗?由于不清楚,您询问了我提供的
信息的输出。请澄清您的问题,并用更适当的细节更新您的帖子。@DenCowboy,也
.trim()
看起来不像bash,看起来像某种语言如果我没有错的话,请在同一方面提及更多细节,然后可以尝试在同一方面提供帮助。它在Groovyth中使用bash脚本
sed
命令不必要地复杂。只要
sed的%^[^/]*/%%'
就可以了。谢谢,我会把它投上去,但我仍然需要在printf开头的单引号之间使用它。@DenCowboy,你能详细说明你想要实现什么吗?由于不清楚,您询问了我提供的
信息的输出。请澄清您的问题,并用更适当的细节更新您的帖子。@DenCowboy,也
.trim()
看起来不像bash,看起来像某种语言如果我没有错的话,请在同一方面提及更多细节,然后可以尝试在同一方面提供帮助。它在Groovyth中使用bash脚本
sed
命令不必要地复杂。只要
sed的%^[^/]*/%%'
就可以了。
sh(脚本:
无效
sh
(或Bash)语法。您试图在什么上下文中使用它?在
sed的/^[^\/]中冒号应该做什么*://g
?这只是一个示例,对吗?在groovy中,用字符串替换Regexp比启动shell和更多进程更有效。如果您用“source of
sh
”标记该问题,这也会有所帮助例如,
jenkins
可能吗?@cfrick它确实在一个jenkins文件中。我需要解析一个env var
sh(脚本:
是无效的
sh
(或Bash)语法。你试图在什么上下文中使用它?在
sed的/^[^\/]中冒号应该做什么*://g
?这只是一个示例,对吗?在groovy中,用字符串替换Regexp比启动shell和更多进程更有效。如果您用“source of
sh
”标记该问题,这也会有所帮助.E.g.
jenkins
maybe?@cfrick它确实在一个jenkins文件中。我需要在那里解析一个env变量