Linux 查找 regex

我在使用 find命令的正则表达式时遇到了麻烦。也许是因为我不明白怎么用命令行逃脱。

为什么这些不一样?

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

Bash Ubuntu

117826 次浏览

你应该看看 find-regextype参数,参见 手册:

      -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.

我猜想 emacs类型不支持 [[:digit:]]结构。我试用了 posix-extended,它的工作原理和预期的一样:

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

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

请注意,-regex依赖于整个路径。

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

您实际上不必使用 -regex来完成您正在做的事情。

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

find使用的默认正则表达式语法不支持带字符类的正则表达式(例如 [[:digit:]])。为了使用它们,需要指定不同的正则表达式类型,如 posix-extended

看一下 GNUFind 的正则表达式 文件,它向您展示了所有的正则表达式类型以及它们支持的内容。