Stephen Walsh
Stephen Walsh

Reputation: 835

Bash: substring from first occurrence of a character to the second occurrence

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"

Upvotes: 9

Views: 14519

Answers (4)

Oleksii Zymovets
Oleksii Zymovets

Reputation: 740

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).

Upvotes: 1

chepner
chepner

Reputation: 531075

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

Upvotes: 11

anubhava
anubhava

Reputation: 785098

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

Upvotes: 4

beliy
beliy

Reputation: 445

Possible use awk with - delimiter

echo "abc-def-ghi" | awk -F'-' '{print $2}'

-F - what field separator to use.

{print $2} - print second position

Upvotes: 6

Related Questions