[英]Using grep to find all emails
如何正确构造“grep”linux 程序的正则表达式,以找到所有 email,例如 /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:]]+"
这仍然非常干净并且匹配......当然,大多数带有@的东西。 同样是 3rd 级别的域,其中也包含带有 '%' 或 '+' 的地址。 有关所用字符类的良好文档,请参阅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 版本,它应该是一个不太容易触发的匹配器。
我使用这个是为了过滤由“at”符号标识并由文本中的空格分隔的电子邮件地址:
egrep -o "[^[:space:]]+@[^[:space:]]+" | tr -d "<>"
当然,您可以使用grep -E代替egrep (扩展 grep)。 请注意, tr命令用于删除典型的电子邮件分隔符。
grep -E -o -r "[A-Za-z0-9][A-Za-z0-9._%+-]+@[A-Za-z0-9][A-Za-z0-9.-]+\\.[A-Za-z]{2,6}" /etc
这是改编自一个最初不是我的答案,但我发现它非常有帮助。 它来自这里:
http://www.shellhacks.com/en/RegEx-Find-Email-Addresses-in-a-File-using-Grep
他们建议:
grep -E -o -r "\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,6}\\b" /etc
但它有某些误报,例如“+person..@example.com”或“person@..com”,并且空白约束会遗漏诸如“mailto:person@example.com”之类的内容(技术上不是电子邮件,但包含一); 所以我稍微调整了一下。
(用grep的选项做你想做的事,我不太了解它们)
这个递归对我很有用:
grep -rIhEo "\b[a-zA-Z0-9.-]+@[a-zA-Z0-9.-]+\.[a-zA-Z0-9.-]+\b" /etc/*
只是想提一下,这个稍微的变化非常适合从 Twitter 推文之类的内容中获取提及:
grep -Eiorh '(@[[:alnum:]_.-]+)' "$@" * | sort | uniq -c
似乎有效,但使用@获取文件名
egrep -osrwh "[[:alnum:]._%+-]+@[[:alnum:]]+\.[a-zA-Z]{2,6}" ~/.thunderbird/
我打赌没有比这个更好的基础正则表达式了
egrep -o "[a-zA-Z0-9\_\.\+\%\-]{1,}\@[a-zA-Z0-9\_\.\+\%\-]{1,}\.[a-zA-Z0-9\_\.\+\%\-]{1,}"
它不会从垃圾中留下一个 Email,但你必须要做的是,提取与 Email 相同但不是 Email 的内容,如home_mobile@1x.png
,要么需要手动查找,要么使我提到的正则表达式更具体您想添加更多特殊字符,但没有比这更好的基本正则表达式
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.