如何扫描包含由新行字符分隔的电子邮件地址的文件,并删除属于特定域的电子邮件地址(例如, [email protected]
。我想摆脱那些@bad.com
如何使用Perl过滤属于特定域的电子邮件地址?
回答
使用grep
,而不是Perl的
grep -v '@bad\.com' inputfile > outputfile
在Windows
findstr /v "@bad\.com" inputfile > outputfile
的所有电子邮件地址这应该做到:
$badDomain = "bad.com";
while(<>)
{
s{\s+$}{};
print "$_\n" if(!/\@$badDomain$/);
}
因为我们从来没有'chomp()'这一行,所以默认情况下它已经在最后有一个换行符。你不需要用另一个打印它(除非你需要输出线之间的空行)。 –
@Chris:如果仔细观察第4行,我将删除所有尾随的空格。这也会删除最后的\ n。所以打印中需要\ n。 – codaddict
啊。在那种情况下,为什么不是's/$ s + $/\ n /;'所以保留了新行,然后只是'print if/regex /'? –
验证码应该从输入文件中过滤所有@ bad.com地址。
my @array = <>;
foreach(@array) {
if(!/\@bad.com$/) {
print $_;
}
}
太糟糕了。为什么你会在'<>'中徘徊,当你可以迭代它以获得相同的效果,几乎没有内存影响? –
的Perl
perl -ne 'print if !/@bad\.com/' file
AWK
awk '!/@bad\.com/' file
这不是正确的模式。它也不包括notbad.com等。 –
下面将让你有一个脚本,你可以在时间提高......而不是简单地过滤掉@ bad.com (你可以用一个简单的grep来完成),你可以编写你的脚本,这样你就可以很容易地复制哪些域是不需要的。
my $bad_addresses = {'bad.com'=>1};
while (my $s = <>) {
print $s unless (is_bad_address($s));
}
sub is_bad_address {
my ($addr) = @_;
if ($addr=~/^([^@]+)\@([^@\n\r]+)$/o) {
my $domain = lc($2);
return 0 unless (defined $bad_addresses->{$domain});
return $bad_addresses->{$domain};
}
return 1;
}
Email::Address
是一个很好的处理电子邮件地址的模块。
这里是一个可以激起你胃口的例子:
use Email::Address;
my $data = 'this person email is [email protected]
blah blah [email protected] blah blah
[email protected]
';
my @emails = Email::Address->parse($data);
my @good_emails = grep { $_->host ne 'bad.com' } @emails;
say "@emails"; # => [email protected] [email protected] an[email protected]
say "@good_emails"; # => [email protected]
也差不太多别人怎么做了。
use strict;
use warnings;
my @re = map { qr/@(.*\.)*\Q$_\E$/ } qw(bad.com mean.com);
while (my $line = <DATA>) {
chomp $line;
if (grep { $line =~ /$_/ } @re) {
print "Rejected: $line\n";
} else {
print "Allowed: $line\n";
}
}
__DATA__
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
- 1. 匹配属于特定域及其子域的所有电子邮件地址
- 2. 过滤任何电子邮件地址
- 3. 过滤掉的电子邮件地址
- 4. 如何验证来自特定域的电子邮件地址?
- 5. Zend framework2电子邮件验证为特定的地址,如Gmail和阻止特定的电子邮件地址
- 6. 如何通过电子邮件发送电子邮件地址
- 7. 过滤基于互联网的电子邮件地址
- 8. ng-pattern不适用于特定的电子邮件地址?
- 9. C#Smtp.Send不适用于特定的电子邮件地址
- 10. 如何使用PHP验证域名的电子邮件地址?
- 11. 使用正则表达式过滤电子邮件地址
- 12. 使用RegEx验证和过滤电子邮件地址?
- 13. 使用jQuery来过滤电子邮件地址
- 14. 过滤电子邮件通过域名
- 15. 将电子邮件域与电子邮件地址相匹配
- 16. 如何从特定的IP地址发送电子邮件?
- 17. 如何阻止特定的电子邮件地址域能够提交Drupal webform?
- 18. 如何检查电子邮件地址是否属于Gmail
- 19. 验证电子邮件地址(域名)
- 20. 用于查找电子邮件地址域的SQL查询
- 21. EWS SearchFilter.ContainsSubstring要过滤的发件人的电子邮件地址
- 22. 如何阻止电子邮件到某些电子邮件地址或域名?
- 23. 发送新的用户电子邮件确认到特定的电子邮件地址域
- 24. 重定向域的所有传入电子邮件到一个特定的电子邮件地址
- 25. 使用数据注释检查特定电子邮件地址
- 26. 如何使用PHP将电子邮件发送到特定的电子邮件地址?
- 27. 如何将电子邮件地址计数提取到特定的smtp地址
- 28. 来自特定电子邮件地址的脚本电子邮件
- 29. 从给定的电子邮件地址获取电子邮件地址DirectoryEntry
- 30. Perl中提取电子邮件地址,INC TLD域名,但不包括子域
+1不错干净。谢谢你的答案。 –
你应该逃离这个点。 – ghostdog74
@ ghostdog74:好点;完成 –