Home > database >  Bash - Extract region from AWS arn
Bash - Extract region from AWS arn

Time:11-24

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?

CodePudding user response:

Thanks for @Inian for the quick and good answer in the comments:

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

Does the trick.

output: eu-west-2

CodePudding user response:

A more flexible approach:

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

CodePudding user response:

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 of \K to forget what is matched so far:

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

An alternative using awk setting : as the field separator and printing the fourth field:

awk -F: '{print $4}'

Or using sed and replace with capture group 2, as capture group 1 is repeated 3 times:

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

The examples will output:

eu-west-2
  • Related