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.
我猜emacs
types不支持[[: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]'