我找到了一长串免费电子邮件提供商,我想将其从我的电子邮件列表中删除 -https://gist.github.com/tbrianjones/5992856
下面是我当前使用的两个命令,它们对少数或单个域条目执行相同的工作,但是如何将它们转换为从另一个文件导入单词?remove.txt
例如,而不是手动添加所有这些。
ruby -rcsv -i -ne 'row = CSV::parse_line($_); puts $_ unless row[2] =~ /gmail|hotmail|qq.com|yahoo|live.com|comcast.com|icloud.com|aol.co/i' All.txt
sed -i '/^[^,]*,[^,]*hotmail/d' All.txt
下面是我们将使用它的一行数据
"fox*******","scott@sc***h.com","821 Ke****on Rd","Neenah","Wisconsin","54***6","UNITED STATES"
答案1
两步:
- 创建一个删除脚本(AUX)
print unless m!gmail.com!hotmail.com|...!
(正则表达式很大,但没有问题) - 将其应用到
All.txt
代码:
perl -n0E 's/\n/|/g; say "print unless m!\\b($_ç)\\b!\n" ' remove.txt > AUX
perl -n AUX All.txt > outfile
更新1:为了不区分大小写,i
在匹配运算符中添加一个:
perl -n0E 's/\n/|/g; say "print unless m!@($_=)\\b!i\n" ' remove.txt > AUX
Update2 具有额外的删除域:创建一个包含例外列表 (extra.txt) 的新文件并且:
cat remove.txt extra.txt |
perl -n0E 's/\n/|/g; say "print unless m!@($_=)\\b!i\n" ' > AUX
perl -n AUX All.txt > outfile
答案2
{ sed -ne's/./^[^,]*,[^,]*&/p' |
grep -vf- ./All.txt
} <./remove.txt >./outfile
我想这就是你问的问题。我不确定它ruby
与您正在谈论的数据线有什么关系......
如果您希望匹配不区分大小写,则只需添加-i
忽略大小写选项即可grep
:
{ sed -ne's/./^[^,]*,[^,]*&/p' |
grep -ivf- ./All.txt
} <./remove.txt >./outfile