yalkris
yalkris

Reputation: 2715

sub string search bash scripting

When given a string I want to search for a substring which matches two characters (9&0. 0 should be the last character in that substring) and exactly two characters in between them

string="asd20 92x0x 72x0 YX92s0 0xx0 92x0x"
#I want to select substring YX92s0 from that above string

for var in $string
do
if [[ "$var" == *9**0 ]]; then
    echo $var  // Should print YX92s0 only
fi
done

Obviously this above command doesn't work.

Upvotes: 0

Views: 380

Answers (2)

Gilles Quénot
Gilles Quénot

Reputation: 185790

string="asd20 92x0x 72x0 X92s0 0xx0"

if [[ $string =~ [[:space:]].?9.{2}0[[:space:]] ]]; then
    echo "found"
fi

Or better, taking advantage of word spliting :

string="asd20 92x0x 72x0 X92s0 0xx0"

for s in $string; do
    if [[ $s =~ (.*9.{2}0) ]]; then
        echo "${BASH_REMATCH[1]} found"
    fi
done

This is regex with .

Upvotes: 0

chepner
chepner

Reputation: 532303

You match each element against the pattern *9??0. There are several ways you can do this; here's one that uses the string to set the positional parameters in a subshell, then iterates over them in a for loop:

( set -- $string
  for elt; do [[ $elt == *9??0 ]] && { echo "found"; exit; }; done )

Upvotes: 1

Related Questions