String 使用Perl提取电子邮件地址(如果它们包含某些字符串)
我有一个大的文本文件,它是一个电子邮件列表(每个邮件后面都有a/n) 我想运行一个perl命令,根据电子邮件是否包含某个字符串生成具有不同列表的文件 到目前为止,我已经:String 使用Perl提取电子邮件地址(如果它们包含某些字符串),string,perl,email,text-extraction,String,Perl,Email,Text Extraction,我有一个大的文本文件,它是一个电子邮件列表(每个邮件后面都有a/n) 我想运行一个perl命令,根据电子邮件是否包含某个字符串生成具有不同列表的文件 到目前为止,我已经: perl -wne' while (/[\w\.\-]+@[\w\.\-]+\w+/g) { print if "$&\n /gmail/; } ' all_emails_extracted.csv | sort -u > output.txt 如果它包含“gmail”,那么应
perl -wne'
while (/[\w\.\-]+@[\w\.\-]+\w+/g) {
print if "$&\n /gmail/;
}
' all_emails_extracted.csv | sort -u > output.txt
如果它包含“gmail”,那么应该写电子邮件,但是无论我如何构造{print if}周围的区域,我都会遇到语法错误。您已经显著地过度复杂了
perl -wne'print if /@.*gmail/' all_emails_extracted.csv
或者,更简单(但没有Perl):
你把这件事搞得太复杂了
perl -wne'print if /@.*gmail/' all_emails_extracted.csv
或者,更简单(但没有Perl):
正常情况下
print "$&\n";
因此,如果添加语句修饰符,它将变为
print "$&\n" if /gmail/;
您缺少一个引号(“
),如果您的放错了位置,您的
简单一点:
perl -nE'say grep /gmail/, /[\w\.\-]+@[\w\.\-]+\w+/g'
您甚至可以用Perl本身进行重复数据消除
perl -MList::MoreUtils=uniq -nE'say uniq grep /gmail/, /[\w\.\-]+@[\w\.\-]+\w+/g'
正常情况下
print "$&\n";
因此,如果添加语句修饰符,它将变为
print "$&\n" if /gmail/;
您缺少一个引号(“
),如果您的放错了位置,您的
简单一点:
perl -nE'say grep /gmail/, /[\w\.\-]+@[\w\.\-]+\w+/g'
您甚至可以用Perl本身进行重复数据消除
perl -MList::MoreUtils=uniq -nE'say uniq grep /gmail/, /[\w\.\-]+@[\w\.\-]+\w+/g'
您的代码中的错误已经被指出,因此这里有另一个建议:使用:
你说你想“用不同的列表制作文件”?电子邮件::地址也可以帮助解决这一问题:
while (<DATA>) {
for (Email::Address->parse($_)) {
push @{$categories{by_host}{$_->host}}, $_;
push @{$categories{bobs}}, $_ if $_->user =~ /bob/i
}
}
因此,请运行最后一个列表:
$ cat hosts.springfield-amusement-park.com
bobette
bobbyMcBobberson
bob
$ cat hosts.yahoo.com
bob
bahb
bob
您的代码中的错误已经被指出,因此这里有另一个建议:使用:
你说你想“用不同的列表制作文件”?电子邮件::地址也可以帮助解决这一问题:
while (<DATA>) {
for (Email::Address->parse($_)) {
push @{$categories{by_host}{$_->host}}, $_;
push @{$categories{bobs}}, $_ if $_->user =~ /bob/i
}
}
因此,请运行最后一个列表:
$ cat hosts.springfield-amusement-park.com
bobette
bobbyMcBobberson
bob
$ cat hosts.yahoo.com
bob
bahb
bob
这两种方法都会打印整行内容,而不仅仅是电子邮件地址。它们还可以在电子邮件地址外匹配“gmail”一词。这两个词都可以打印整行内容,而不仅仅是电子邮件地址。他们还可以在电子邮件地址之外匹配“gmail”一词。