我有一长串需要提取的电子邮件地址,但是我找不到正确的方法。
数据的结构与此类似。
Patabee meeta needo buffalos@outlook.com pizz bees
Needo target@outlook.com hama lines question
unix search exchange helpme@outlook.com extracts
Run Code Online (Sandbox Code Playgroud)
我的数据中一致的一件事是电子邮件域。
目前我有...
grep -oniT @outlook.com /path/to/file/of/emails/and/such.txt
Run Code Online (Sandbox Code Playgroud)
它返回一个很好的输出..
3624 :@outlook.com
3625 :@outlook.com
3626 :@outlook.com
3630 :@outlook.com
3631 :@outlook.com
3632 :@outlook.com
3633 :@outlook.com
3634 :@outlook.com
3635 :@outlook.com
Run Code Online (Sandbox Code Playgroud)
但是,我需要它来选择整个电子邮件地址,而不仅仅是域(这是我当前搜索的内容。
如何让 grep 选择它找到匹配字符串的整个字段,而不是整行?
这是使用grep的解决方案:
grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" /path/to/file/of/emails/and/such.txt
Run Code Online (Sandbox Code Playgroud)
这将获得文件中的所有电子邮件地址。您可能希望调整正则表达式以仅匹配特定域。
-E, --extended-regexp 将 PATTERN 解释为扩展的正则表达式
-o, --only-matching 只打印匹配行的匹配(非空)部分,每个这样的部分在一个单独的输出行上。
-o
仅打印与模式匹配的部分,因此您需要扩展模式以包含@
. 使用示例中的地址,捕获任何非空白应该可以:
$ grep -oniTE '[^[:blank:]]+@outlook.com' foo
1: buffalos@outlook.com
2: target@outlook.com
3: helpme@outlook.com
Run Code Online (Sandbox Code Playgroud)
但一般来说,电子邮件地址很难解析(它们可能包含带引号的空格),并且上面的内容会丢失一些有效的电子邮件地址(以及包含一些无效的电子邮件地址)。请参阅维基百科和相关标准以了解详细信息。
归档时间: |
|
查看次数: |
6173 次 |
最近记录: |