如何使用 sed 剪切电子邮件地址?

Hei*_*js7 3 sed text-processing

我有以下 emails.txt:

tsar@gmail.com
c2m_@hotmail.com.es
c72@hotmail.com.es.com;es
m7_@hotmail.es.com
cm_@hotmail.com
@pepito.com 
Run Code Online (Sandbox Code Playgroud)

和一个 sed 命令来获取

sed -n -r '/\w+@\w+\.\w+((\.\w+)*)?/p' emails.txt 

tsar@gmail.com
cm_@hotmail.com 
Run Code Online (Sandbox Code Playgroud)

但是,它一直显示包含多个 .com 的电子邮件

我不想要这些电子邮件:

c2m_@hotmail.com.es
c72@hotmail.com.es.com;es
m7_@hotmail.es.com 
@pepito.com 
Run Code Online (Sandbox Code Playgroud)

我被困在这里,我不知道如何获得它。

ter*_*don 6

使用sed,您可以执行以下操作:

$ sed -nr '/^[^@]+@[^.]+\.com\s*$/p' file
tsar@gmail.com
cm_@hotmail.com
Run Code Online (Sandbox Code Playgroud)

正则表达式@在行首查找一个或多个非字符,然后是 a @,然后是一个或多个非.字符.com,然后是 0 或多个空格。


其他选择:


use*_*728 5

我会使用这样的东西:

sed -n -r '/\w+@\w+\.com$/p' emails.txt

tsar@gmail.com
cm_@hotmail.com
Run Code Online (Sandbox Code Playgroud)

它将以格式检索每封电子邮件 user@xxx.com

如果你需要更多的东西“通用”不仅.com.fr或者.uk你可以使用:

sed -n -r '/\w+@\w+\.\w+$/p' emails.txt
Run Code Online (Sandbox Code Playgroud)

这将以格式检索每封电子邮件 user@xxx.xxx