2014-06-12 88 views
1

我有一個名爲A_B發現文件名正則表達式

我用下面的正則表達式來找到它的文件,以及他們的工作:

find . -iname "a_b" 

find . -iname "a_*b" 

但是怎麼來的以下格式沒有找到它?

find . -iname "a_{1}b" 

是不是正確的,{1}意味着前一個字符是"_"應該完全匹配一次?

回答

2

您使用的是正則表達式,但find-iname-name行動預計模式(水珠)。 (鏈接由@Adam提供)只與正則表達式有關,而且更簡單,但也不那麼強大。

(順便說一句:在你的具體的例子,你需要既不 - 只是用字符作爲是會做)

如果你需要一個正則表達式的電源,且find版本支持,使用-iregex-regex行動(他們是POSIX標準的部分):

  • GN üfind(Linux的):

    find . -regextype posix-extended -iregex ".*/a_{1}b" 
    
  • 的FreeBSD/OSX find

    find -E . -iregex ".*/a_{1}b" 
    

注:

  • -iregex-regex匹配整個輸入路徑,因此.*/前綴。
    (相比之下,-iname-name比賽只有一部分。)
  • 兩個片段使用選項明確激活支持擴展正則表達式-E/-regextype posix-extended),以確保構建這種支持作爲{1}或允許它們的使用而不需要\-逃避{}
+1

[本頁](http://www.tldp.org/LDP/abs/html/globbingref.html)有更多關於'Globbing'的信息,以及它與正則表達式的區別。 – Adam

+0

哦!至少現在我知道我不應該在發現之前放置正則表達式!但是我輸入了你的建議解決方案,但仍然沒有得到結果。它可能是我的shell缺乏正則表達式嗎? –

+0

@MahshidZeinaly:我不好 - 請看我最新的答案。 (順便說一句:這裏不是_shell_,而是'find'實用程序支持的內容。你在什麼平臺上?) – mklement0