2010-10-07 85 views
0

我試圖找到一些壓縮的日誌文件,並對它們進行一些操作。我不能使用ls,因爲它們是目錄中的數千個文件,BASH會拋出'參數列表太長'的錯誤。 這使我找到了,但我遇到了我的正則表達式的麻煩。與Find + emacs-regex模式匹配的正則表達式子表達式

這裏是整個find命令

find $i -regex '.*logfile_MP[0-9]-GW0[0-9]_2010-09-\(\([7-9]\)|\(1[0-9]\)|\(2[0-3]\)\)-.*' -exec ls {} \; 

我其實需要經過幾個日誌目錄,所以$ I來自一個BASH循環來遍歷所有目錄。 現在,我只是想列出文件,所以我知道我有正確的;一旦我開始工作,我會修改我的-exec語句。

問題涉及括號部分:

\(\([7-9]\)|\(1[0-9]\)|\(2[0-3]\)\) 

我想匹配天數範圍(7-23)。從我對Emacs-regex模式的理解中,我必須避開所有的括號。 正則表達式的其餘部分工作,因爲如果我用一個數字(例如7)替換括號部分,它工作正常。

任何人都可以幫助我創建一個正則表達式匹配7-23?

謝謝。

回答

1

我認爲你是在正確的軌道上,只是在每個|面前缺少\

\([7-9]\|1[0-9]\|2[0-3]\) 
+0

感謝三分球。它工作完美。這是我所用過的最醜陋的正則表達式。愚蠢的逃跑... – fandingo 2010-10-07 17:19:18