How to match digits in regex in bash script

Either use standard character set or POSIX-compliant notation:

[0-9]    
[[:digit:]]    

As read in Finding only numbers at the beginning of a filename with regex:

\d and \w don’t work in POSIX regular expressions, you could use [:digit:] though

so your expression should be one of these:

regex="AAA \(bbb [0-9]+\) CCC"
#                ^^^^^^
regex="AAA \(bbb [[:digit:]]+\) CCC"
#                ^^^^^^^^^^^^

All together, your script can be like this:

#!/bin/bash

s="AAA (bbb 123) CCC"
regex="AAA \(bbb [[:digit:]]+\) CCC"
if [[ $s =~ $regex ]]; then
  echo "$s matches $regex"
else
  echo "$s doesn't match $regex"
fi

Let’s run it:

$ ./digits.sh
AAA (bbb 123) CCC matches AAA \(bbb [[:digit:]]+\) CCC

Leave a Comment