linux找到正则表达式

Dij*_*tra 70 regex unix linux bash find

我在使用find命令的正则表达式时遇到了麻烦.可能是我不明白在命令行上逃避的事情.

为什么这些不一样?

find -regex '.*[1234567890]'
find -regex '.*[[:digit:]]'
Run Code Online (Sandbox Code Playgroud)

Bash,Ubuntu

bmk*_*bmk 69

你应该看一下-regextype参数find,参见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. 
Run Code Online (Sandbox Code Playgroud)

我猜这种emacs类型不支持该[[:digit:]]构造.我尝试了它,posix-extended它按预期工作:

find -regextype posix-extended -regex '.*[1234567890]'
find -regextype posix-extended -regex '.*[[:digit:]]'
Run Code Online (Sandbox Code Playgroud)

  • 我认为可能是这样,但我检查了emacs正则表达式定义,它们似乎支持[:digit:].http://www.gnu.org/software/emacs/manual/html_node/elisp/Char-Classes.html#Char-Classes (2认同)

dog*_*ane 53

使用[[:digit:]]的默认正则表达式语法不支持具有字符类(例如)的正则表达式find.您需要指定不同的正则表达式类型posix-extended,以便使用它们.

看看GNU Find的正则表达式文档,该文档向您展示了所有正则表达式类型及其支持的内容.


kur*_*umi 27

请注意,这-regex取决于整个路径.

 -regex pattern
              File name matches regular expression pattern.  
              This is a match on the whole path, not a search.
Run Code Online (Sandbox Code Playgroud)

你实际上不必使用-regex你正在做的事情.

find . -iname "*[0-9]"
Run Code Online (Sandbox Code Playgroud)

  • 这里也不需要明确的点;) (2认同)