Linuxfind正则expression式

使用find命令的正则expression式遇到问题。 可能是我不明白在命令行上转义的东西。

为什么这些不一样?

 find -regex '.*[1234567890]' find -regex '.*[[:digit:]]' 

Bash,Ubuntu

带有字符类的正则expression式(例如[[:digit:]] )在find使用的默认正则expression式语法中不受支持。 您需要指定一个不同的正则expression式types,如posix-extended才能使用它们。

看看GNU Find的正则expression式文档 ,它会显示所有正则expression式types及其支持的内容。

您应该查看find-regextype参数,请参阅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. 

我猜emacstypes不支持[[:digit:]]结构。 我尝试了posix-extended和它按预期工作:

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

请注意, -regex取决于整个path。

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

你实际上并不需要使用-regex来做你正在做的事情。

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

那么,你可以试试这个'.*[0-9]'