In bash, how do I get a substring of everything from the first occurrence of a character to the second occurrence of the same character.
Example...
Input String = "abc-def-ghi"
Character = "-"
Desired Output String = "def"
In bash, how do I get a substring of everything from the first occurrence of a character to the second occurrence of the same character.
Example...
Input String = "abc-def-ghi"
Character = "-"
Desired Output String = "def"
Possible use awk with -
delimiter
echo "abc-def-ghi" | awk -F'-' '{print $2}'
-F - what field separator to use.
{print $2} - print second position
I would use two parameter expansions.
str="abc-def-ghi"
tmp=${str#*-} # Remove everything up to and including first -
result=${tmp%%-*} # Remove the first - and everything following it
Possible use awk with -
delimiter
echo "abc-def-ghi" | awk -F'-' '{print $2}'
-F - what field separator to use.
{print $2} - print second position
Let's say you have:
s="abc-def-ghi"
ch='-'
Using BASH read
builtin:
IFS="$ch" read -ra arr <<< $s && echo "${arr[1]}"
Or, using BASH regex:
re="$ch([^$ch]*)$ch"
[[ $s =~ -([^-]*)- ]] && echo "${BASH_REMATCH[1]}"
Output:
def
Why not just use cut command like this:
str="abc-def-ghi"
echo $str | cut -f 2 -d "-"
, where -d option is a delimiter and -f option stands for fragment number (the first fragment number is 1, not 0 as it is common for arrays).
© 2022 - 2024 — McMap. All rights reserved.