首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >排除与全局域名匹配的邮件

排除与全局域名匹配的邮件
EN

Stack Overflow用户
提问于 2012-10-29 18:28:28
回答 6查看 111关注 0票数 1

全局域在"*@“选项中,当电子邮件与这些全局域之一匹配时,我需要将它们从列表中排除。

示例:

代码语言:javascript
复制
WF,*@stackoverflow.com
WF,*@superuser.com
WF,*@stackexchange.com
WF,test@superuser.com
WF,test@stackapps.com
WF,test@stackexchange.com

输出:

代码语言:javascript
复制
WF,*@stackoverflow.com
WF,*@superuser.com
WF,*@stackexchange.com
WF,test@stackapps.com
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-10-29 18:50:03

代码语言:javascript
复制
$ awk -F, 'NR==FNR && /\*@/{a[substr($2,3)]=1;print;next}NR!=FNR && $2 !~ /^\*/{x=$2;sub(/.*@/,"",x); if (!(x in a))print;}' OFS=, file file
WF,*@stackoverflow.com
WF,*@superuser.com
WF,*@stackexchange.com
WF,test@stackapps.com
票数 2
EN

Stack Overflow用户

发布于 2012-10-29 18:59:57

您在同一文件中有两种类型的数据,因此最简单的处理方法是首先对其进行划分:

代码语言:javascript
复制
<infile tee >(grep '\*@' > global) >(grep -v '\*@' > addr) > /dev/null

然后使用globaladdr中删除信息

代码语言:javascript
复制
grep -vf <(cut -d@ -f2 global) addr

把它们放在一起:

代码语言:javascript
复制
<infile tee >(grep '\*@' > global) >(grep -v '\*@' > addr) > /dev/null
cat global <(grep -vf <(cut -d@ -f2 global) addr) > outfile

outfile的内容

代码语言:javascript
复制
WF,*@stackoverflow.com
WF,*@superuser.com
WF,*@stackexchange.com
WF,test@stackapps.com

使用rm global addr清理临时文件。

票数 3
EN

Stack Overflow用户

发布于 2012-10-29 18:40:35

你可以这样做:

代码语言:javascript
复制
grep -o "\*@.*" file.txt | sed -e 's/^/[^*]/' > global.txt
grep -vf global.txt file.txt

这将从提取全局电子邮件开始,并在它们前面加上[^*],将结果保存到global.txt中。然后将该文件用作grep的输入,在grep中,每一行都被视为[^*]*@global.domain.com形式的正则表达式。-v选项告诉grep只打印与该模式不匹配的行。

另一个类似的选择是,使用sed进行就地编辑:

代码语言:javascript
复制
grep -o "\*@.*" file.txt | sed -e 's/^.*$/\/[^*]&\/d/' > global.sed
sed -i -f global.sed file.txt
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13119804

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档