emaillist.txt
1. Saman.desilva@tamucc.edu
2. saman_desilva@tamucc.edu
3. saman&desilva@tamucc.edu
4. Saman.desilva@gmail.com
5. saman@desilva@yahoo.com
6. saman@mail@com
7. saman.desilva@yahoo com
我想打印有效的电子邮件地址,但无法解决此问题。到目前为止,我已经有了此脚本,但是它无法显示完全正确的输出。仍然给我一个错误的输出。
sed -nr '/\w+@\w+\.\w+$/p' emaillist.txt
输出:
saman.desilva@tamucc.edu
saman_desilva@tamucc.edu
saman&desilva@tamucc.edu
Saman.desilva@gmail.com
saman@desilva@yahoo.com
答案 0 :(得分:0)
首先,与所有有效电子邮件地址匹配的正则表达式为notoriously complex。考虑到测试数据,我将假设您的目标是一个更简单的电子邮件地址有效性概念。
您的正则表达式存在一个问题,即您与行首没有匹配,该行以^
表示。这样可以匹配无效的电子邮件(例如,用户名中带有“&”号的电子邮件),因为它只匹配“&”号之后的所有内容。因此,如果我们添加^
,则会得到以下输出:
$ sed -nr '/^\w+@\w+\.\w+$/p' emaillist.txt
saman_desilva@tamucc.edu
那也不对,现在的问题是\w
仅represents任何字母,数字或下划线。句点是测试数据中用户名的另一个“有效”非字母数字字符,因此我们还需要调整您的模式以添加它,现在我们获得了正确的输出:
$ sed -nr '/^(\w|\.)+@\w+\.\w+$/p' emaillist.txt
Saman.desilva@tamucc.edu
saman_desilva@tamucc.edu
Saman.desilva@gmail.com