linux find regex linux find regex unix unix

linux find regex


You should have a look on the -regextype argument of find, see manpage:

      -regextype type          Changes the regular expression syntax understood by -regex and -iregex           tests which occur later on the command line.  Currently-implemented            types  are  emacs (this is the default), posix-awk, posix-basic,           posix-egrep and posix-extended. 

I guess the emacs type doesn't support the [[:digit:]] construct. I tried it with posix-extended and it worked as expected:

find -regextype posix-extended -regex '.*[1234567890]'find -regextype posix-extended -regex '.*[[:digit:]]'


Regular expressions with character classes (e.g. [[:digit:]]) are not supported in the default regular expression syntax used by find. You need to specify a different regex type such as posix-extended in order to use them.

Take a look at GNU Find's Regular Expression documentation which shows you all the regex types and what they support.


Note that -regex depends on whole path.

 -regex pattern              File name matches regular expression pattern.                This is a match on the whole path, not a search.

You don't actually have to use -regex for what you are doing.

find . -iname "*[0-9]"