簡體   English   中英

如何使用正則表達式在 Unix 中搜索文件?

[英]How can I use regular expression to search files in Unix?

我有來自 2 個不同類別的以下文件: 類別 1:MAA MAB MAC MAD MAE MAF MAG MAH MAJ MBA MBB MBC MBD MBE MDA MDD

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

所以我的問題是:如何編寫正則表達式,以便只能從類別 1 中找到文件?

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

我正在嘗試這個:找到。 -regex "*[M][A,B,D][A,B,C,D,E,F,J].txt"

這很簡單:

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" | .... 

您的問題不是很精確,但是從您的嘗試中,我得出結論,您正在尋找名稱以 ....MAA.txt、...MAB.txt 等結尾的文件,並且位於您的工作目錄中目錄或下面的某個地方。

您也沒有提到您使用的是哪種外殼。 這是一個使用 zsh 的示例 - 無需在此處編寫正則表達式:

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

我正在嘗試這個:找到。 -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*"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM