linux找到正则表达式


71

我在使用正则表达式时遇到麻烦 find命令。关于在命令行上转义,可能是我不了解的事情。

为什么这些不一样?

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

Bash,Ubuntu


您必须输出什么来表明它们不是?
剥壳机2011年

Answers:


54

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

查看GNU Find的正则表达式文档,该文档向您显示所有正则表达式类型及其支持的功能。


1
谢谢。该文件是我应该寻找的文件。我能找到的只是gnu.org/software/emacs/manual/html_node/elisp/…-似乎暗示字符集在“ emacs regex模式”受支持。
Dijkstra

1
还要检查Regular_expression#Character_classes-非常有用的资源
asoundmove

70

您应该看看的-regextype参数find,请参阅联机帮助页

      -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:]]'

2
我以为可能是这样,但是我检查了emacs regex定义,它们似乎支持[:digit:]。gnu.org/software/emacs/manual/html_node/elisp/…–
Dijkstra

28

请注意,这-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]"

2
这里也不需要专用点;)
Al.G.

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.