2015-12-23 45 views
-2

我有以下2個不同類別的文件: 第1類: MAA MAB MAC MAD MAE MAF MAG MAH MAJ MBA MBB MBC MBD MBE MDA MDD如何使用正則表達式在Unix中搜索文件?

和類別2: MCA MCB MCC MCD MCE MCF MCG MDB

所以我的問題是:如何寫正則表達式,這樣我可以從只有1個類別中找到文件?

我不想做硬編碼的腳本,期待一些聰明人的邏輯。

我正在試圖: 找到。 -regex 「* [M] [A,B,d] [A,B,C,d,E,F,J] .TXT」

+0

這不是UNIX論壇;嘗試grep函數或http://stackoverflow.com/questions/6844785/how-to-use-regex-with-find-command – cutzero

+0

你期望什麼樣的邏輯?正則表達式來自模式。您必須提供有關您決定將類別分開的模式的信息。作爲一種觀察,如果您的類別2中的'MDB'應該是類別1的一部分,那麼您可以爲類別1創建基於'MA *''MB *''MD *'的邏輯,併爲類別創建一個邏輯「MC *」 2;) – Hemang

+0

在第2位發生「D」之後能分離嗎? –

回答

0

這很簡單:

ls -l | grep "MAA\|MAB\|MAC\|MAD\|MAE\|MAF\|MAG\|MAH\|MAJ\|MBA\|MBB\|MBC\|MBD MBE\|MDA\|MDD" 

好了,所以你不想硬編碼。然後是你應該說明這應該不符合-v

ls -l | grep -v "MC." | grep -v "pattern2" | .... 
+0

對不起維克多... 期望一些邏輯不是硬代碼 –

+0

一個代碼塊本身並不能提供一個好的答案。請添加解釋。 –

+0

這個答案是有用的,不值得downvote – cutzero

0

你的問題不是很精確的模式,但是從你的嘗試,我的結論,你正在尋找有結尾的文件名的文件.... MAA。 txt,... MAB.txt等等,位於你的工作目錄或下面的某個地方。

你也沒有提及,你正在使用哪個shell。下面是使用zsh的一個例子 - 沒有必要在這裏寫一個正則表達式:

ls ./**/*M{AA,AB,AC,AD,AE,AF,AG,AH,AJ,BA,BB,BC,BD,BE,DA,DD}.txt 
0

我想這一點:找到。 -regex 「* [M] [A,B,d] [A,B,C,d,E,F,J]的.txt」

在此的錯誤是:

  • 正則表達式中的任何字符的通配符是.*,而正常文件名模式中的*不同。
  • 您在第三個括號表達式中忘記了GH
  • 您沒有排除類別2名稱MDB

除了:

  • 括號表達式中的字符不被,分離。
  • 單個項目([M])的括號表達式可以僅由項目(M)替換。

這導致:

find . -regex ".*M[ABD].*" -not -name "MDB*" 

,或者沒有正則表達式:

find . -name "M[ABD]*" -not -name "MDB*" 
相關問題