![获取与正则表达式匹配的文件行](https://linux22.com/image/142906/%E8%8E%B7%E5%8F%96%E4%B8%8E%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E5%8C%B9%E9%85%8D%E7%9A%84%E6%96%87%E4%BB%B6%E8%A1%8C.png)
有没有比以下更紧凑的方法来获取与正则表达式匹配的文件行?
open my $fh, '<', $file or die "Cannot open $file: $!";
while ( my $line = <$fh> ) {
next unless $line =~ m/^foo\/([^\/]+\/?)*==/;
chomp($line);
$line =~ s/==$//g;
$search_result_set{$line} = 1;
}
答案1
@lines = grep s{^foo/([^/]+/?)*\K==\n?\z}{}, <$fh>;
将在数组中存储与@lines
模式匹配且删除尾随的行==\n
。$
匹配主题末尾和\n
主题尾随之前的内容,这里我们使用\n?\z
(可选的\n
后跟主题末尾 ( \z
))来删除换行符(如果存在),有效地完成chomp
工作。\K
标记要替换部分的开始。