我在使用 find命令的正则表达式时遇到了麻烦。也许是因为我不明白怎么用命令行逃脱。
find
为什么这些不一样?
find -regex '.*[1234567890]' find -regex '.*[[:digit:]]'
Bash Ubuntu
你应该看看 find的 -regextype参数,参见 手册:
-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,它的工作原理和预期的一样:
emacs
[[:digit:]]
posix-extended
find -regextype posix-extended -regex '.*[1234567890]' find -regextype posix-extended -regex '.*[[:digit:]]'
你可以试试这个 '.*[0-9]'
'.*[0-9]'
请注意,-regex依赖于整个路径。
-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 的正则表达式 文件,它向您展示了所有的正则表达式类型以及它们支持的内容。