1

I have a version string, for example

version=1.2.23b2

I want to have only the last part with the b2, so I tried this:

${version##*[0-9]*.[0-9]*.[0-9]*} 

My thought was that * would mean no or many repetitions of the leading pattern, but in fact it means any character no or many times. So I want my pattern to express, that this is only about digits, one ore more times.

Andreas Hubert
  • 381
  • 6
  • 18

1 Answers1

1

* in glob pattern matches any character 0 or more times.

You can use extended glob pattern here:

shopt -s extglob 
echo "${version##+([0-9.])}"
b2

Or else, you can use regex here:

version='1.2.23b2'
re='^[0-9]+.[0-9]+.[0-9]+(.+)'
[[ $version =~ $re ]] && echo "${BASH_REMATCH[1]}"

b2

Even this regex should work above:

re='^[0-9.]+(.+)'
anubhava
  • 761,203
  • 64
  • 569
  • 643