从电子邮件地址列表中修剪与“禁止域名”匹配的所有地址"列表

时间:2015-06-07 08:52:27

标签: regex bash

我有一个电子邮件地址列表(在文本文件中,每行一个地址):

u1@d1.com
u2@d1.com
u3@d1.com
u1@d2.com
u1@d3.com
u1@d4.com
u2@d4.com

我还有一个域列表(在文本文件中,每行一个域):

d1.com
d2.com

我正在尝试编写两个bash脚本:

  • 将返回一个列表,该列表排除与第二个列表中的任何一个域匹配的任何电子邮件地址(我会认为那些是"好的"那些)

    < / LI>
  • 只会返回一个列表,其中只包含与第二个列表中任何一个域匹配的电子邮件地址(我将从我的网站中删除属于这些地址的用户)

最好,最简单的方法是什么?我对bash生锈了,我发现它很棘手。正则表达式是基本的。

请注意,我不是完全解决方案,而是&#34;关键命令&#34;实现这一目标。

2 个答案:

答案 0 :(得分:1)

使用grep命令,如:

grep -f allowed_domains emails

获取允许的电子邮件,其中&#34; allowed_domains&#34;是你在问题中显示的第二个文件,&#34;电子邮件&#34;是第一个。 。添加&#34; -v&#34;对于不允许的电子邮件。

如果你想要更强大的东西,可以添加一个&#34; @&#34;在每个allowed_domain行的开头。例如,as:

cat allowed_domains | xargs -L1 printf "@%s\n" | grep -f - emails

答案 1 :(得分:0)

您可以使用此awk命令:

awk -F@ 'NR==FNR{dom[$0]; next} {print > (($2 in dom)? "bad.txt":"good.txt")}' file2 file1

cat good.txt
u1@d3.com
u1@d4.com
u2@d4.com

cat bad.txt
u1@d1.com
u2@d1.com
u3@d1.com
u1@d2.com