【发布时间】:2017-02-01 20:51:04
【问题描述】:
我有一个文件test.txt,其中包含以下内容:
BC@ABSC.CA
ABCabc+-._@mcmaster.io.ca
ABCabc+-._@school.image
ABCabc+-._@school3-computer.image
ABCabc+-._@school3-IT.image.tor.chrome.ca
ABCabc+-._@school3-IT.image.tor.chrome.canadannn
ABC123abc+-._@school3-IT.imageal.tor.chrome.canadannn
ABCabc+-._@school3-*IT.image.tor.chrome.ca
ABCabc+-._@school3-IT.image.tor.chrome.caskdlfj
ABCab*c+-._@school3-IT.image.tor.chrome.caABCabc
然后我用
grep -E '^[A-Za-z0-9+._-]+@([a-zA-Z0-9-]+\.)+[a-zA-Z]{2,6}' test.txt
正在尝试匹配有效的电子邮件。 这里的关键是最后一个子域必须是 2 到 6 个字符的序列。
所以我跳到获得以下输出:
BC@ABSC.CA
ABCabc+-._@mcmaster.io.ca
ABCabc+-._@school.image
ABCabc+-._@school3-computer.image
ABCabc+-._@school3-IT.image.tor.chrome.ca
但我也得到以下即使最后一个域的长度成功 6 个字符。
ABCabc+-._@school3-IT.image.tor.chrome.canadannn
ABC123abc+-._@school3-IT.imageal.tor.chrome.canadannn
ABCabc+-._@school3-IT.image.tor.chrome.caskdlfj
我该如何解决这个问题?
【问题讨论】:
-
不知道为什么投反对票
-
这是因为您有多个子域(不仅仅是 1 个)。最后加上
$。 -
@MadPhysicist 嗨,我试过把 $ 放在需要的地方,但它什么也没返回
-
我刚刚尝试运行
grep -E '^[A-Za-z0-9+._-]+@([a-zA-Z0-9-]+\.)+[a-zA-Z]{2,6}$' test.txt并得到了您想要的结果。 -
@MadPhysicist 我在 ubuntu 上运行了完全相同的命令,但什么也没得到。不知道为什么。