我有以下 emails.txt 文件:
[email protected]
[email protected]
[email protected];es
[email protected]
[email protected]
@pepito.com
并使用 sed 命令获取
sed -n -r '/\w+@\w+\.\w+((\.\w+)*)?/p' emails.txt
[email protected]
[email protected]
但是,它一直显示包含多个 .com 的电子邮件
我不想要这些电子邮件:
[email protected]
[email protected];es
[email protected]
@pepito.com
我被困在这里,不知道该如何得到它。
答案1
使用sed
,你可以执行以下操作:
$ sed -nr '/^[^@]+@[^.]+\.com\s*$/p' file
[email protected]
[email protected]
@
正则表达式在行首查找一个或多个非字符,然后查找 ,然后查找@
一个或多个非字符,然后查找 0 个或多个空格。.
.com
其他选择:
Perl
perl -ne 'print if /^[^@]+@[^.]+\.com\s*$/' file
GNU
grep
grep -P '^[^@]+@[^.]+\.com\s*$' file
POSIX
grep
grep -E '^[^@]+@[^.]+\.com\s*$' file
awk
awk '$0~/^[^@]+@[^.]+\.com\s*$/' file
答案2
我会用这样的东西:
sed -n -r '/\w+@\w+\.com$/p' emails.txt
[email protected]
[email protected]
它将以以下格式检索每封电子邮件[email protected]
如果您需要更“通用”的东西,不仅.com
如此,.fr
或者.uk
您可以使用:
sed -n -r '/\w+@\w+\.\w+$/p' emails.txt
这将检索格式为[email protected]
答案3
该表达式((\.\w+)*)?
匹配第一个域之后的其他序列.xyz
。如果要匹配仅有的那些地址只有一个域名,那么你可以通过用$
或(更强大)替换它来强制执行\s*$
sed -n -r '/\w+@\w+\.\w+\s*$/p' emails.txt
要求第一个域和行尾之间没有任何内容(可能的空格除外)。