Манипуляция строк в Groovy - PullRequest
0 голосов
/ 04 февраля 2020

Я пишу сценарий 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 язык, как я должен использовать его в Плагин реактивного параметра активного выбора Дженкинса

Ответы [ 3 ]

1 голос
/ 04 февраля 2020

Предполагается:

​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

Обновление

Из-за комментария ОП ответ после всего должен выглядеть как-то как:

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()}​​​​​​ 
0 голосов
/ 04 февраля 2020

Просто добавив еще один стиль:

String.metaClass.getMyString{-> delegate.substring(delegate.lastIndexOf("/")+1, delegate.length()-1).replace(":", "")}
println p.text.readLines()*.getMyString().join(" ")

Счастливого обучения ...! :)

0 голосов
/ 04 февраля 2020

Вы можете разделить, используя / и получить последний элемент:

def p = "arn:aws:ecs:us-west-2:496712345678:task-definition/test:2"
def result = p.split("/").last()
...