I’m having problems using the locate command’s regex. It’s probably something to do with command line escaping that I don’t understand.
Why aren’t they the same?
find -regex '.*' find -regex '.*[[:digit:]]'
Asked by Dijkstra
You should look into the -regextype parameter of find, which can be found in the 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 '.*' find -regextype posix-extended -regex '.*[[:digit:]]'
Answered by bmk
The default regular expression syntax used by find does not handle regular expressions with character classes (e.g. [[:digit:]]). To utilize them, you must specify a separate regex type, such as posix-extended.
Look through the Regular Expression documentation in GNU Find to see all of the regex types and what they support.
Answered by dogbane
It’s worth noting that -regex is path-dependent.
-regex pattern File name matches regular expression pattern. This is a match on the whole path, not a search.
For what you’re doing, you don’t need to use -regex.
find . -iname "*[0-9]"
Answered by kurumi
You might try ‘.*[0-9]’ instead.
Answered by StKiller
Post is based on https://stackoverflow.com/questions/5635651/linux-find-regex