bash - How to match digits in regex -


i'm trying match lines against regex contains digits.

bash version 3.2.25:

#!/bin/bash  s="aaa (bbb 123) ccc" regex="aaa \(bbb \d+\) ccc" if [[ $s =~ $regex ]];   echo $s matches $regex else   echo $s doesnt match $regex fi 

result:

aaa (bbb 123) ccc doesnt match aaa \(bbb \d+\) ccc 

if put regex="aaa \(bbb .+\) ccc" works doesn't meet requirement 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 numbers @ beginning of filename regex:

\d , \w don't work in posix regular expressions, use [:digit:] though

so expression should 1 of these:

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

all together, script can this:

#!/bin/bash  s="aaa (bbb 123) ccc" regex="aaa \(bbb [[:digit:]]+\) ccc" if [[ $s =~ $regex ]];   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 

Comments

Popular posts from this blog

basic authentication with http post params android -

vb.net - Virtual Keyboard commands -

css - Firefox for ubuntu renders wrong colors -