2015-07-02 44 views
0

我花了幾個小時試圖獲得一個正則表達式字符串,並沒有運氣。字符串函數將搜索文件列表並拉取其中包含以下任何內容的文件列表:(OL####,DE####,DEA####,OLA####)。到目前爲止,我已經得到以下幾種工作。使用GREP和正則表達式來搜索多個字符串

grep "\<[DE\b|DEA\b|OL\b|OLA\b]\+[0-9]" 

然而,它仍然找到諸如「E1」之類的東西並將這些線拉出。我錯過了什麼?我對正則表達式很陌生,正在努力學習。

回答

1

試試這個:

grep -oE '\b(OL|DE|DEA|OLA)[0-9]+\b' file 
+1

你的答案已經得到了,非常感謝你,雖然我不得不刪除-o來獲得像我想要的完整行。最興奮的一天,當我看到它只是拉我正在尋找的條目列表。 –

+0

是的,'-o'僅打印匹配行的匹配(非空)部分。 – Cyrus

1

你需要與圓的,以取代您的方括號,並去除+

grep -P "<(DE|DEA|OL|OLA)[0-9]" 

還要注意的是尖括號不需要轉義。我假設你打算在那裏有<,因爲它不在你的示例字符串中。

+0

然而,我嘗試儘可能早地使用括號,並在嘗試你的代碼後,它給了我零結果輸出文件。 –

+0

你的文件中有尖括號嗎?如果沒有,請將它們從正則表達式中移除。另外,我忘了包含'-P'來使用PCRE。 '-E'也可以。 –

1

你不能在字符類中使用alternation。一個字符類定義了一組字符。說 - 「匹配班級指定的一個字符」。使用grouping結構來代替:

我會嘗試以下方法來匹配行:

grep -E '\b(DEA?|OLA?)[0-9]+' 

如果你只想要串,請使用下列內容:

grep -Eo '\b(DEA?|OLA?)[0-9]+' 
相關問題