我正在尝试逐行读取文件,如果一行包含来自正则表达式的内容,请打印该行。
my $file = 'test.txt';
open my $info, $file or die "Could not open $file: $!";
while( my $line = <$info>) {
if ($line =~ /\d\d\W\d\d\W\d\d/) {
print $&;
}
}
测试文件
<td align='center'>0</td></tr><tr><td style='width:1px;padding:0px;'><img src='styles/images/cat/bluray.png' alt='Blu-ray'></td>
<td><a href='details.php?id=313788&hit=1'><b>The.Raid.2.2014.1080p.BluRay.REMUX.AVC.DTS-HD.MA.5.1.RoSubbed...</b></a></td>
<td align='center' style='width:1px;'><font class='small'>2014-06-27<br />03:39:15</font></td>
<td align='center'>0</td>
<td align='center'>0</td></tr><tr><td style='width:1px;padding:0px;'><img src='styles/images/cat/bluray.png' alt='Blu-ray'></td>
<td><a href='details.php?id=313781&hit=1'><b>Rio.2.2014.Blu-ray.REMUX.1080p.AVC.DTS-HD.MA.7.1.RoSubbed-playBD</b></a></td>
<td align='center' style='width:1px;'><font class='small'>2014-06-27<br />00:27:25</font></td>
<td align='center'>48</td>
<td align='center'>33</td></tr><tr><td style='width:1px;padding:0px;'><img src='styles/images/cat/hdtv.png' alt='HDTV'></td>
<td><a href='details.php?id=313717&hit=1'><b>Cosmos. A Spacetime Odyssey 2014 1080p BluRay DD5.1 x264-DON</b></a></td>
<td align='center' style='width:1px;'><font class='small'>2014-06-26<br />16:26:30</font></td>
<td align='center'>19</td>
现在它只打印找到的第一个实例,文件中还有更多实例。如果我想打印$ line代替$&amp ;,它会打印文件的每一行,就像IF语句每次都是真的一样。
答案 0 :(得分:0)
由于根据您的评论获得count=0
,这意味着您实际上正在处理一行 - 您的文件会以100%的形式出现。
当输入记录分隔符$/
与文件的行结束字符不匹配时,通常会发生这种情况,因为一个是Windows,一个是Unix:Unix换行符是"\n"
字符,而DOS / Windows是"\r\n"
要修复,以下方法可行:
将文件从Unix转换为Windows格式(在Unix端,使用unix2dos
命令)
将$/
更改为"\n"
。
完全覆盖文件(使用my $data = File::Slurp::read_file($filename);
),然后将"\n"
字符上的$ data拆分为多行。