电子邮件列表.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
首先,匹配所有有效电子邮件地址的正则表达式非常复杂。我假设,根据测试数据,你的目标是一个更简单的电子邮件地址有效性概念。
正则表达式的一个问题是,您从行的开头就不匹配,这一行用^
表示。这样就可以匹配无效的电子邮件,比如用户名中带有"与"符号的电子邮件,因为它只匹配"与"后面的所有内容。因此,如果我们添加^
,我们就会得到以下输出:
$ sed -nr '/^w+@w+.w+$/p' emaillist.txt
saman_desilva@tamucc.edu
这也不对,现在的问题是w
只代表任何字母、数字或下划线。句点是测试数据中用户名的另一个"有效"非字母数字字符,因此我们还需要调整您的模式来添加它,现在我们得到了正确的输出:
$ sed -nr '/^(w|.)+@w+.w+$/p' emaillist.txt
Saman.desilva@tamucc.edu
saman_desilva@tamucc.edu
Saman.desilva@gmail.com