2011-03-16 61 views
0

我有一個小腦袋,我確信有人可以快速回答。我正在使用cygwin在windows中獲取bash shell(以防有任何特殊情況),並且無法在ls和find之間移動正則表達式。ls和find之間的正則表達式差異搜索1個字符串或另一個字符串

我有一堆,我需要訪問的文件,其中一些開始EA_而一些開始FS_這樣我就可以像這樣

ls -l {EA,FS}_* 

ls列出他們的,這也正常工作與廁所,但是當我嘗試在查找中使用的這個,正則表達式似乎並不是正確的: -

find . -iname "{EA,FS}_*" 

我試圖逃避{和},但似乎並沒有工作,要麼 - 我在做什麼錯誤?

乾杯

MH

+1

這兩個答案下面arebasically正確的,我只是想notd你的 「LS」 的表達是不是正則表達式,而不是ls。它是bash的BRACE和PATHNAME擴展的組合。 – nhed 2011-03-16 12:29:05

+0

啊,我想知道是否在查找的正則表達式和用「相同」表達式在ls中擴展參數有區別。正如我所提到的,我通過qor72嘗試了正則表達式的答案,但它並沒有返回任何結果,但我會在Linux今晚嘗試一下,看看它是否在那裏工作,它的cygwin是古怪的 – 2011-03-16 14:51:10

+0

我發現我不得不更改qor72在Linux上表達「find」。 -iregex'。*/\(EA \ | FS \)_。*''和MacOs到'find -E。 -iregex'。* /(EA | FS)_。*''去圖:) – nhed 2011-03-16 18:07:26

回答

4

看起來像你需要一個正則表達式,而不是通常的名稱水珠:

find . -iregex './\(EA\|FS\)_.*' 

記住這個語法,你必須得符合目錄。從你的命令看起來好像你在一個目錄中完成(沒有深度),所以我提供的將會起作用。對於更多的遞歸搜索,你需要一個不同的正則表達式。在Cygwin中,Windows 7

試運行:

$ find . -iregex './\(RT\|ED\).*' | head 
./ED-AT-CK01-A01.xml 
./ED-AT-CK02-A01.xml 
./ED-AT-CL01-A01.xml 
./ED-AT-CL02-A01.xml 
./ED-AT-CL03-A01.xml 
./ED-AT-CL04-A01.xml 
./ED-AT-IL001-A01.xml 
./ED-AT-IL01-A01.xml 
./ED-AT-IL02-A01.xml 
./ED-AT-TB02-A01.xml 
+1

這似乎不工作 - 除非有其他建議,我會在我的Linux系統今晚嘗試它,以防萬一它是某種東西與cygwin奇怪 – 2011-03-16 14:24:12

+0

@Mad我在Cygwin運行它進行測試。語法很痛苦,imo。我搞亂了你的RE嗎? – AlG 2011-03-16 15:24:18

+0

ahah,那是小狗 - thx。我是否正確地說,在正常的正則表達式中,你不必輸入所有這些逃脫角色?我之前做過很多正則表達式,甚至有些相當複雜的,但我只是偶爾需要使用它們,所以它可能只是我與他們的OOP = 8)(或者也許它是cygwin有點奇怪,如果一個普通的正則表達式不需要所有這些轉義字符)。 – 2011-03-16 15:28:21

4

,你也可以做到這一點

find . -type f \(-iname "ES*" -o -iname "FS_*" \) 
+0

謝謝,這適用於這個簡單的例子,但我會想在一個單一的正則表達式作爲搜索標準將變得更加複雜,但是我想知道在這個簡單的例子中,在正則表達式實現中的區別是什麼(或者如果我做錯了),在我開始變得更復雜之前 – 2011-03-16 14:26:41

+0

@Mad Halfing,請看看'find'的手冊頁來查看使用'iregex'的要求。它搜索整個路徑,而不是文件名。 – kurumi 2011-03-16 14:37:28

+0

我已經看了man page - 它得到了正則表達式的工作 - 甚至找到EA,例如,在任何地方的文件名似乎並沒有工作 – 2011-03-16 15:04:21

相關問題