I'm trying to match some lines against regex that contains digits.
Bash version 3.2.25:
#!/bin/bash  s="AAA (bbb 123) CCC" regex="AAA \(bbb \d+\) CCC" if [[ $s =~ $regex ]]; then   echo $s matches $regex else   echo $s doesnt match $regex fi   Result:
AAA (bbb 123) CCC doesnt match AAA \(bbb \d+\) CCC   If I put regex="AAA \(bbb .+\) CCC" it works but it doesn't meet my requirement to match digits only.
Why doesn't \d+ match 123?
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:
\dand\wdon'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 
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With