linux Bash -从AWS arn中提取区域

bxgwgixi  于 2022-11-28  发布在  Linux
关注(0)|答案(3)|浏览(108)

非常简单的任务:从AWS数组中提取区域。
示例:

arn:aws:lambda:eu-west-2:12345678912:layer:my-awsome-layer:3

我需要提取eu-west-2
我有一个可用的正则表达式:^(?:[^:]+:){3}([^:]+).*
我尝试了以下命令,但它返回整个字符串:

echo "arn:aws:lambda:eu-west-2:12345678912:layer:my-awsome-layer:3" | grep -oP '^(?:[^:]+:){3}([^:]+).*'

输出:arn:aws:lambda:eu-west-2:12345678912:layer:my-awsome-layer:3
上面有什么不妥吗?

sc4hvdpw

sc4hvdpw1#

因为您在模式的末尾使用了.*,所以您可以返回整行。
当您使用grep -oP时,您可以使用\K来忘记到目前为止匹配的内容:

grep -oP '^(?:[^:]+:){3}\K[^:]+'

使用awk的另一种方法是将:设置为字段分隔符并打印第四个字段:

awk -F: '{print $4}'

或者使用sed并替换为捕获组2,因为捕获组1重复3次:

sed 's/^\([^:]\+:\)\{3\}\([^:]\+\).*/\2/'

示例将输出:

eu-west-2
kqqjbcuj

kqqjbcuj2#

感谢@伊尼安在评论中快速而好的回答:

echo "arn:aws:lambda:eu-west-2:12345678912:layer:my-awsome-layer:3" | cut -d':' -f4

确实有效。
输出:eu-west-2

sqyvllje

sqyvllje3#

更灵活的方法:

grep -oP '\w{2}-\w+-\d+'

相关问题