我有一个文件数组。现在我需要捕获每个文件并搜索文件keywords.txt
中的关键字列表。
我的keywords.txt
包含在下面
AES
3DES
MD5
DES
SHA-1
SHA-256
SHA-512
10.*
http://
www.
@john.com
john.com
我希望输出如下
file jack.txt contains AES:5 (5 line number) http://:55
file new.txt contains 3DES:75 http://:105
答案 0 :(得分:0)
好的,这是我的代码
use warnings;
use strict;
open STDOUT, '>>', "my_stdout_file.txt";
my $filename = $ARGV[2];
chomp ($filename);
open my $fh, q[<], shift or die $!;
my %keyword = map { chomp; $_ => 1 } <$fh>;
print "$fh\n";
while ( <> ) {
chomp;
my @words = split;
for ( my $i = 0; $i <= $#words; $i++ ) {
if ( $keyword{ $words[ $i ] } ) {
print "Keyword Found for file:$filename\n";
printf qq[$filename Line: %4d\tWord position: %4d\tKeyword: %s\n],
$., $i, $words[ $i ];
}
}
}
但问题是考虑所有的Arguments并试图打开ARGV的文件[2]。实际上我只需要打开ARGV [0]和ARGV [1]。 ARGV [2]我只保留在输出中写作。 感谢回应。 感谢。
答案 1 :(得分:0)
我想也许这些txt文件的一行中有多个关键字。所以下面的代码供您参考:
my @keywords;
open IN, "keywords.txt";
while(<IN>) {
if(/^(.+)$/) {
push(@keywords, $1);
}
}
close(IN);
my @filelist=glob("*.txt");
foreach my $filename(@filelist) {
if(open my $fh, '<', $filename) {
my $ln=1;
while(my $line = <$fh>) {
foreach my $kw(@keywords) {
if($line=~/$kw/) {
print $filename.':'.$ln.':'.$kw."\n";
}
}
$ln++;
}
}
close($fh);
}
答案 2 :(得分:0)
好的,但我注意到的一件事是......
关键字
http://
oracle.com
它匹配整个单词,而应该尝试匹配作为字符串的一部分..只有这些关键字..其他应该按照上面的搜索。