2012-06-05 53 views
1

假设我有一个来自smtp日志的文本文件(如下所示),grep的正则表达式是如何提取此日志文件中的电子邮件?来自SMTP的grep电子邮件mail.log

Jun 4 17:19:12 username postfix/pickup[22643]: C92866601: uid=33 from=<www-data> 
Jun 4 17:19:12 username postfix/cleanup[23012]: C92866601: message-id=<[email protected]> 
Jun 4 17:19:12 username postfix/qmgr[2591]: C92866601: from=<[email protected]>, size=1314, nrcpt=2 (queue active) 
Jun 4 17:19:13 username postfix/smtp[23014]: C92866601: to=<[email protected]>, relay=smtp.domain.com[134.96.7.25]:25, delay=0.5, delays=0.132, delays=11/0.01/0.09/0.21, dsn=2.0.0, status=sent (250 2.0.0 q53M4Dg6001057 Message accepted for delivery) 
Jun 4 17:19:13 username postfix/smtp[23014]: C92866601: to=<[email protected]>, relay=smtp.domain.com[134.96.7.25]:25, delay=0.5, delays=0.132, delays=11/0.01/0.09/0.21, dsn=2.0.0, status=sent (250 2.0.0 q53M4Dg6001057 Message accepted for delivery) 
Jun 4 17:19:13 username postfix/qmgr[2591]: C92866601: removed 
Jun 4 17:19:13 username postfix/pickup[22643]: E146B6601: uid=33 from=<www-data> 
Jun 4 17:19:13 username postfix/cleanup[23012]: E146B6601: message-id=<[email protected]> 
Jun 4 17:19:13 username postfix/qmgr[2591]: E146B6601: from=<[email protected]>, size=1327, nrcpt=2 (queue active) 
Jun 4 17:19:14 username postfix/smtp[23014]: E146B6601: to=<[email protected]>, relay=smtp.domain.com[134.96.7.31]:25, delay=0.43, delays=0.132, delays=11/0.01/0.09/0.21, dsn=2.0.0, status=sent (250 2.0.0 q53M4Dg6001057 Message accepted for delivery) 
Jun 4 17:19:14 username postfix/smtp[23014]: E146B6601: to=<[email protected]>, relay=smtp.domain.com[134.96.7.31]:25, delay=0.43, delays=0.132, delays=11/0.01/0.09/0.21, dsn=2.0.0, status=sent (250 2.0.0 q53M4Dg6001057 Message accepted for delivery) 
Jun 4 17:19:14 username postfix/qmgr[2591]: E146B6601: removed 
Jun 4 17:19:14 username postfix/pickup[22643]: EF1606601: uid=33 from=<www-data> 
Jun 4 17:19:14 username postfix/cleanup[23012]: EF1606601: message-id=<[email protected]> 
Jun 4 17:19:15 username postfix/qmgr[2591]: EF1606601: from=<[email protected]>, size=1329, nrcpt=2 (queue active) 
Jun 4 17:19:15 username postfix/smtp[23014]: EF1606601: to=<[email protected]>, relay=smtp.domain.com[134.96.7.31]:25, delay=0.42, delays=0.132, delays=11/0.01/0.09/0.21, dsn=2.0.0, status=sent (250 2.0.0 q53M4Dg6001057 Message accepted for delivery) 
Jun 4 17:19:15 username postfix/smtp[23014]: EF1606601: to=<[email protected]>, relay=smtp.domain.com[134.96.7.31]:25, delay=0.42, delays=0.132, delays=11/0.01/0.09/0.21, dsn=2.0.0, status=sent (250 2.0.0 q53M4Dg6001057 Message accepted for delivery) 
Jun 4 17:19:15 username postfix/qmgr[2591]: EF1606601: removed 

回答

4
grep -o '[-a-zA-Z0-9.]*@.[^>]*' filename 

我认为是字母,数字,连字符和点为有效的电子邮件地址。

如果您不确定在日志文件中使用的电子邮件命名规则,那就试试这个:

grep -o '<[^@]*@.[^>]*' filename 

上面的命令使电子邮件与<前面加上。