搜索文件列表文件中的关键字

时间:2016-07-19 10:47:35

标签: perl perlscript

我有一个文件数组。现在我需要捕获每个文件并搜索文件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

3 个答案:

答案 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

它匹配整个单词,而应该尝试匹配作为字符串的一部分..只有这些关键字..其他应该按照上面的搜索。

相关问题