新的perl编码器在这里。
当我将网站上的文本复制并粘贴到文本文件中并从该文件中读取时,我的perl脚本无问题。当我使用getstore自动从网站创建一个我想要的文件时,输出就是一堆|' s。
当我复制和粘贴文本或使用getstore下载文本时,文本看起来相同。我无法找出问题所在。任何帮助都将受到高度赞赏。
我想要的输出如下:
|www\.arkinsoftware\.in|www\.askmeaboutrotary\.com|www\.assculturaleincontri\.it|www\.asu\.msmu\.ru|www\.atousoft\.com|www\.aucoeurdelanature\.
enter code here
以下是我正在使用的代码:
#!/usr/bin/perl
use strict;
use warnings;
use LWP::Simple;
getstore("http://www.malwaredomainlist.com/hostslist/hosts.txt", "malhosts.txt");
open(my $input, "<", "malhosts.txt");
while (my $line = <$input>) {
chomp $line;
$line =~ s/.*\s+//;
$line =~ s/\./\\\./g;
print "$line\|";
}
答案 0 :(得分:0)
这就是我要做的事情:
my $first = 1;
while (<$input>) {
/^127\.0\.0\.1\s+(.+?)\s*$/ or next;
print '|' if !$first;
$first = 0;
print quotemeta($1);
}
这会以更精确的方式匹配您的输入,quotemeta
负责真正的正则表达式转义。
答案 1 :(得分:0)
一堆|你得到的,是从一开始的不合适的评论行。因此,解决方案是忽略所有&#34;不适合&#34;线。
所以而不是
$line =~ s/.*\s+//;
使用
next unless $line =~ s/^127.*\s+//;
所以你会忽略除了从127开始的每一行。
答案 2 :(得分:0)
我可能会选择以下内容:
#!/usr/bin/perl
use strict;
use warnings;
use LWP::Simple;
getstore( "http://www.malwaredomainlist.com/hostslist/hosts.txt",
"malhosts.txt" );
open( my $input, "<", "malhosts.txt" );
print join ( "|",
map { m/^\d/ && ! m/localhost/ ?
quotemeta ((split)[1]) : () } <$input> );
给出:
0koryu0\.easter\.ne\.jp|1\-atraffickim\.tf|10\-trafficimj\.tf|109\-204\-26\-16\.netconnexion\.managedbroadband\.co\.uk|11\-atraasikim\.tf|11\.lamarianella\.info|12\-tgaffickvcmb\.tf| #etc.