在文本文件中捕获无效的电子邮件地址

时间:2015-12-17 03:37:34

标签: regex perl shell unix awk

我的要求:

我有一个20GB的txt文件,它是制表符分隔的。我想使用PERL / AWK(或grep)查看“第n列”中的电子邮件地址是否有效。(正则表达式---> ; / ^(\ w | - | _ |。)+ \ @((\ w | - | _)+。)+ [a-zA-Z] {2,} $ /应该没问题,但没有连续性' ..'OR'underscores'例如:abc..cd @ xyz.com应该无效,同样abc__cd@xyz.com也应该无效。)如果电子邮件地址有效,如果无效重定向,则将其重定向到valid_email.txt至invalid_email.txt。重点是捕获所有无效的电子邮件地址 - 具有更好的性能 - 因为文件大小将在未来日期进一步增长。

修改/更新:

以下代码是否可以捕获至少99%的无效电子邮件地址格式?还是需要进一步修改?请随时发表您的意见和建议。

提取有效的电子邮件ID

grep -E -o“\ b [A-Za-z0-9 ._%+ - ] + @ [A-Za-z0-9 .-] +。[A-Za-z] {2, 6} \ b“Raw_file.txt> Valid_Email_List.txt(其中Rawfile.txt仅包含电子邮件地址)

1 个答案:

答案 0 :(得分:0)

您不应使用正则表达式来验证电子邮件地址。在大多数情况下,您不需要通过语法完全验证电子邮件地址 - 这不是很有用。

首先,接受包含@字符的任何地址作为有效。这将排除99%的随机噪音。"

然后,如果您想知道地址是否真的有效,请发送电子邮件给它!如果您收到肯定确认,例如用户点击电子邮件中包含的验证链接,则该确认有效。

如果您仅根据语法执行此操作,则会接受像nobody@example.com这样明显不好的地址。并且您将接受来自提供商的电子邮件地址,这些地址早已停业(使地址"不可用"尽管在语法上"有效")。