使用GREP和正则表达式搜索多个字符串

时间:2015-07-02 21:44:59

标签: regex grep

我花了几个小时试图获得一个正则表达式字符串,没有运气。字符串功能是搜索文件列表并拉出其中包含以下任何内容的文件:(OL####,DE####,DEA####,OLA####)。到目前为止,我已经得到了以下工作。

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

然而它仍然会找到诸如“E1”之类的东西并将这些线拉出来。我错过了什么?我对正则表达式很陌生,我正在努力学习。

3 个答案:

答案 0 :(得分:1)

您需要将圆括号替换为方括号,然后移除+

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

另请注意,尖括号不需要转义。我假设您打算在那里<,因为它不在您的示例字符串中。

答案 1 :(得分:1)

您无法在角色类中使用alternation。字符类定义一组字符。说 - &#34;匹配班级指定的一个字符&#34;。改为使用grouping结构:

我会尝试以下方法来匹配这些行:

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

如果您只想要子字符串,请使用以下内容:

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

答案 2 :(得分:1)

试试这个:

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