我花了几个小时试图获得一个正则表达式字符串,没有运气。字符串功能是搜索文件列表并拉出其中包含以下任何内容的文件:(OL####,DE####,DEA####,OLA####)
。到目前为止,我已经得到了以下工作。
grep "\<[DE\b|DEA\b|OL\b|OLA\b]\+[0-9]"
然而它仍然会找到诸如“E1”之类的东西并将这些线拉出来。我错过了什么?我对正则表达式很陌生,我正在努力学习。
答案 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