使用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