我正在编写一个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:2,test:3等等,不带双引号
如何使用Groovy语言做到这一点,因为我必须在Jenkins的主动选择反应参数插件中使用它
假设:
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()}
def p = 'aws ecs list-task-definitions --family-prefix test'.execute() | 'jq .taskDefinitionArns[]'.execute() p.split("\n").collect {c -> c.split("/").last()}.join(",")
但我收到以下错误Caught: groovy.lang.MissingMethodException: No signature of method: java.lang.UNIXProcess.split() is applicable for argument types: (String) values: [ ]
在问题中有p.waitFor()和p.text来获取文本。将其保存在变量中,然后尝试我在答案中提供的代码段
无论如何我都更新了答案
有效 !!!我得到了以下结果,
[test:2", test:3"]
但我希望test2 test3
彼此之间像下面这样然后使用:text.split(“ \ n”)..collect {c-> c.split(“ /”)。last()}。join(“ \ n“)