我有一个电子邮件地址列表(在文本文件中,每行一个地址):
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;实现这一目标。
答案 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