使用grep查找所有电子邮件

如何正确构建“grep”linux程序的正则表达式,找到/ etc目录中的所有电子邮件? 目前,我的脚本如下:

grep -srhw "[[:alnum:]]*@[[:alnum:]]*" /etc

它工作正常 - 看到一些电子邮件,但是当我修改它时,在“@”符号之前和之后捕捉一个或多个字符......

grep -srhw "[[:alnum:]]+@[[:alnum:]]+" /etc

它完全停止工作

此外,它不捕获形式为“Name.LastName@site.com”的电子邮件

帮帮我 !


这是另一个例子

grep -Eiorh '([[:alnum:]_.-]+@[[:alnum:]_.-]+?.[[:alpha:].]{2,6})' "$@" * | sort | uniq > emails.txt

该变体适用于3个级别的域。


grep需要大部分正则表达式特殊字符才能被转义 - 包括+ 。 你会想要做这两个之一:

grep -srhw "[[:alnum:]]+@[[:alnum:]]+" /etc

egrep -srhw "[[:alnum:]]+@[[:alnum:]]+" /etc

我修改了你的正则表达式,把它改为包括标点符号(比如。-_等)

egrep -ho "[[:graph:]]+@[[:graph:]]+"

这仍然是相当干净的,并且匹配......当然,大多数情况下都带有@。 此外,还有第三级域名,其中也包含'%'或'+'。 请参阅http://www.delorie.com/gnu/docs/grep/grep_8.html以获得有关使用的字符类的良好文档。

在我的例子中,地址被白色空间包围,使得匹配非常容易。 例如,如果您通过邮件服务器日志grep,则可以添加<>以使其仅匹配地址:

egrep -ho "<[[:graph:]]+@[[:graph:]]+>"

@thomas,@ glowcoder和@oedo都是正确的。 定义电子邮件地址如何显示的RFC非常有趣。 (我一直在使用GNU grep 2.9,包含在Ubuntu中)。

同时查看下面的zpea的版本,它应该可以做出更少触发器的匹配器。

链接地址: http://www.djcxy.com/p/92865.html

上一篇: Using grep to find all emails

下一篇: Ruby Email validation with regex