非常简单的任务:从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
上面有什么不妥吗?
3条答案
按热度按时间sc4hvdpw1#
因为您在模式的末尾使用了
.*
,所以您可以返回整行。当您使用grep
-oP
时,您可以使用\K
来忘记到目前为止匹配的内容:使用
awk
的另一种方法是将:
设置为字段分隔符并打印第四个字段:或者使用
sed
并替换为捕获组2,因为捕获组1重复3次:示例将输出:
kqqjbcuj2#
感谢@伊尼安在评论中快速而好的回答:
确实有效。
输出:
eu-west-2
sqyvllje3#
更灵活的方法: