Very simple task: extract the region from an AWS arn.
Example:
arn:aws:lambda:eu-west-2:12345678912:layer:my-awsome-layer:3
I need to extract eu-west-2
I have a working regex for this: ^(?:[^:]+:){3}([^:]+).*
I tried this command, but it returns the entire string:
echo "arn:aws:lambda:eu-west-2:12345678912:layer:my-awsome-layer:3" | grep -oP '^(?:[^:]+:){3}([^:]+).*'
output: arn:aws:lambda:eu-west-2:12345678912:layer:my-awsome-layer:3
What is wrong with the above?
3
Answers
Thanks for @Inian for the quick and good answer in the comments:
Does the trick.
output:
eu-west-2
A more flexible approach:
You get back the whole line because you are using
.*
at the end of the pattern.As you are using grep
-oP
you can make use ofK
to forget what is matched so far:An alternative using
awk
setting:
as the field separator and printing the fourth field:Or using
sed
and replace with capture group 2, as capture group 1 is repeated 3 times:The examples will output: