2014-08-28 47 views
-1

我花了整个下午试图弄清楚这一点,我想你们可能在5分钟内知道答案。英雄正则表达式挑战

我需要在这样的文件中列出字符串的出现次数。 (az,AZ,0-9,_, - )后面跟着CHRIS或DAVE,后面跟着(0到多个)(az,AZ,0-9,_, - ) )

所以像这样的文件:

eader>fooCHRISbar</header> 
madeup>DAVE123 more stuff after space 
more stuff hereCHRISDAVE</done> 
blah CHRIS.internet.com</done> 

将返回

fooCHRISbar 
DAVE123 
hereCHRISDAVE 
CHRIS.internet.com 

..basically它寻找克里斯和DAVE出现的所有,包括周围的文本(字符,下划线或一路冲到<或空间或东西

回答

1

您需要在第二个字符类条件中添加.。因此,它将匹配字符串CHRIS.INTERNET.COM,

$ grep -oP '[\w-]*(?:CHRIS|DAVE)[\w.-]*' file 
fooCHRISbar 
DAVE123 
hereCHRISDAVE 
CHRIS.internet.com 
+0

如果点出现在CHRIS之前,那么您需要在第一个字符类中添加'.'。 'grep -oP'[\ w .-] *(?:CHRIS | DAVE)[\ w .-] *'file' – 2014-08-28 11:19:17

+0

谢谢 - 这正是我需要的! – 2014-08-28 12:59:07

+0

[然后接受此答案...](http://stackoverflow.com/help/accepted-answer) – 2014-08-28 13:00:21