How to get string between two characters like:
https://hello.world.example.com
to get hello
between //
and .
I try the following:
echo 'https://hello.world.example.com' | awk -F[/.] '{print $2}'
looks like it can be parsed
how to parse the string between //
and .
?
thanks!
CodePudding user response:
Bash itself has string manipulation procedures.
Try:
s='https://hello.world.example.com'
s1="${s#*//}" # Deletes shortest match of *// from front of $s
s2="${s1%%.*}" # Delete longest match of .* (ie, from first .) in s1
echo "$s2"
# hello
In the first case, #*//
is the shortest match from the front of the string up to and including //
.
In the second case, %%.*
matches the longest sub string from the literal '.' to the end of the string represented by *
You can read more here.
Or use sed
:
echo "$s" | sed -E 's/^[^/]*\/\/([^.]*)\..*/\1/'
^ Substitute
^ Start of string
^ Not a /
^ Two literal //
^ Capture that
^ Literal .
^ The rest of the string
^ The replacement
is the captured word
CodePudding user response:
Your original awk
command will place the string hello
in column 3 instead of 2.
Using your awk
with a minor change, the string will now be in column 2
$ echo 'https://hello.world.example.com' | awk -F"[/.] " '{print $2}'
hello
Or using sed
$ echo 'https://hello.world.example.com' | sed -E 's~[^/]*/ |\..*~~g'
hello