我遇到了尝试运行以下命令的问题:
aws ecs list-task-definitions | grep Foo-Task-Testing | awk -F '/' '{print $2}'
这恰好返回我正在寻找的只是任务定义名称。
仅使用grep在CLI中运行命令时,我得到以下信息:
"arn:aws:ecs:us-east-1:xxxxxxxxxx:task-definition/Foo-Task-Testing-TaskDefinition-OYBZ78KBUI57:1",
包括Awk时,我得到:
Foo-Task-Testing-TaskDefinition-OYBZ78KBUI57:1"
但是,当我尝试将其添加到我的Jenkins管道中时:
ecsTaskDefinitionName = Foo-Task-Testing
ecsTaskDefinition = sh(returnStdout: true, script: "aws ecs list-task-definitions | grep $ecsTaskDefinitionName | awk -F '/' '{print \$2}'").trim()
我总是收到此错误消息:
/home/jenkins/workspace/foo_test_PR-828@tmp/durable-a5ce4670/script.sh: 1: /home/jenkins/workspace/foo_test_PR-828@tmp/durable-a5ce4670/script.sh: Syntax error: Unterminated quoted string
我觉得这与我在Groovy中使用Awk的方式有关,但是我似乎无法在网上找到足够的示例来确认这一点。有人可以使用Awk在Groovy w / o中提供做到这一点的方法,还是有经验的Groovy程序员可以告诉我传递Awk的正确方法?
答案 0 :(得分:1)
您可以避免使用awk
来使用grep -o
:
... | grep -o Foo-Task-Testing.*
返回
Foo-Task-Testing-TaskDefinition-OYBZ78KBUI57:1
(-o仅返回匹配项,。*贪婪地匹配之后的所有内容)