我有2个列表,一个是文件列表,另一个是日志文件。
我希望if
查询打印出日志文件的每一行,其中列出了列表中的文件。
例如:文件列表:
myfile1.txt
myfile2.txt
日志文件:
line 1 html
line 2 filename="myfile2.txt"
line 3 /html
line 4 /xml
所需的输出是:
myfile2.txt found at line 2
我尝试过多次查询,例如
if(index($Lines_Logfile[$logcounter] ,'Lines_Name[$namecounter]') != -1);
或
if($Lines_Logfile[$logcounter] =~ m/$Lines_Name[$namecounter]/);
其中$Lines_Logfile
和$Lines_Name
是列表,$namecounter
和$logcounter
是for
循环的行。
答案 0 :(得分:3)
您可以使用正则表达式。诀窍是认识到你需要使用quotemeta
或\Q...\E
来逃避正则表达式特殊字符,并使用字边界\b
来防止匹配子字符串。
use strict;
use warnings;
use autodie;
my @files = qw(myfile1.txt myfile2.txt);
#open my $fh, '<', 'yourfile.log';
my $fh = \*DATA; # Testing data used for debug purposes
while (<$fh>) {
for my $file (@files) {
if (/\b\Q$file\E\b/) {
print "$file found at line $.: $_";
}
}
}
__DATA__
html
filename="myfile2.txt"
/html
/xml
输出:
myfile2.txt found at line 2: filename="myfile2.txt"