温馨提示:本文翻译自stackoverflow.com,查看原文请点击:jenkins - String Manipulation in Groovy
amazon-ecs groovy jenkins

jenkins - Groovy中的字符串操作

发布于 2020-04-16 14:42:35

我正在编写一个groovy脚本,它将向我返回AWS ECS服务中的任务定义列表,这是相同代码段

def p = 'aws ecs list-task-definitions --family-prefix test'.execute() | 'jq .taskDefinitionArns[]'.execute()
p.waitFor()
print p.text

输出是

"arn:aws:ecs:us-west-2:496712345678:task-definition/test:2"
"arn:aws:ecs:us-west-2:496712345678:task-definition/test:3"

现在,我只想捕获结果的最后一部分,即test:2test:3等等,不带双引号

如何使用Groovy语言做到这一点,因为我必须在Jenkins的主动选择反应参数插件中使用它

查看更多

提问者
Devendra Prakash Date
被浏览
185
Mark Bramnik 2020-02-04 16:22

假设:

​def text = "arn:aws:ecs:us-west-2:496712345678:task-definition/test:2" + "\n" + "arn:aws:ecs:us-west-2:496712345678:task-definition/test:3"​​​​​​​​​​​​

尝试:

text​.split("\n")​​​​​​​​​​​​​.collect {c -> c.split("/").last()}​​​​​​

这将打印一个列表 [test:2, test:3]

如果要在一行中而不是列表中使用它,请使用:

text​.split("\n")​​​​​​​​​​​​​.collect {c -> c.split("/").last()}​​​​​.join(",")​

打印: test:2,test:3

更新资料

由于OP的评论,答案毕竟应该类似于:

def p = 'aws ecs list-task-definitions --family-prefix test'.execute() | 'jq .taskDefinitionArns[]'.execute()
p.waitFor()
def text =  p.text
println text​.split("\n")​​​​​​​​​​​​​.collect {c -> c.split("/").last()}​​​​​​