2011-04-12 67 views
69

我無法使用find命令的正則表達式。可能是我不明白在命令行上轉義的內容。linux查找正則表達式

爲什麼這些不一樣?

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

猛砸,Ubuntu的

+0

你有什麼輸出表明他們不是? – shellter 2011-04-12 13:16:12

回答

50

與字符類(例如[[:digit:]])正則表達式中由find使用的默認正則表達式語法不被支持。您需要指定不同的正則表達式類型,例如posix-extended才能使用它們。

查看GNU Find的正則表達式documentation,它向您顯示所有正則表達式類型及其支持的內容。

+0

謝謝。該文件是我應該一直在尋找的。我能找到的所有內容都是http://www.gnu.org/software/emacs/manual/html_node/elisp/Char-Classes.html#Char-Classes - 這似乎表明字符類*在* emacs正則表達式中被支持模式」。 – Dijkstra 2011-04-12 13:24:52

+1

另外檢查[Regular_expression#Character_classes](http://en.wikipedia.org/wiki/Regular_expression#Character_classes) - 非常有用的資源 – asoundmove 2013-07-23 15:48:30

67

你應該對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類型不支持[[:digit:]]結構。我posix-extended嘗試過了,它的工作如預期:

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

我認爲這可能是,但我檢查了emacs正則表達式定義,他們似乎支持[:數字:]。 http://www.gnu.org/software/emacs/manual/html_node/elisp/Char-Classes.html#Char-Classes – Dijkstra 2011-04-12 13:19:57

2

那麼,你可以試試這個'.*[0-9]'

+3

這不是他的問題的答案;你只是重寫了他的正則表達式... – 2015-01-08 07:46:53

27

注意-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

在這裏也不需要顯式點;) – 2015-11-22 17:33:16