在多个XML文件中搜索字符串

时间:2013-08-19 13:05:24

标签: xml string perl wildcard

我不是一个perl / programmer的交易,但我遇到了一些可以用perl脚本解决的问题。

我想搜索服务器自动输出的多个XML文件。该软件使用时间戳命名文件,这使得事先很难知道文件的名称,但我知道它们所在的文件夹。

如何让代码搜索文件夹中的每个文件并查找特定的字符串,例如* .xml?

这是我一直使用的代码,它需要一个文件名,字符串搜索功能可以工作:

#!/usr/bin/perl
use warnings;
use strict;

my $file;

for $file (@ARGV) {
# print "\n -----\n";
my $lines = slurp($file);
# print " File contains:\n$lines";

print "\n";
if ( $lines =~ /false/ ) {
 print " Searched for string 'false' in @ARGV";
 print "\n";
 print " String found!\n";
}
  else {
   print " Searched for string 'false' in @ARGV";
   print "\n";
   print " No hit!\n";
  }
}

sub slurp {

my ($file) = shift;
my ($f);
open( $f, "<", $file ) || die " Can't open file $file, quitting.\n";
my $scalar = do { local $/; <$f> };
return $scalar;
}  

exit(0);

谢谢!

2 个答案:

答案 0 :(得分:0)

使用您的目录作为脚本的第一个参数而不是文件列表,然后浏览目录:

...
opendir(DIR, $ARGV[0]) or die "cannot open directory $ARGV[0]: $!\n";
my @xmlfiles = grep(/\.xml$/,readdir(DIR));
closedir(DIR);    

foreach (@xmlfiles) {
    slurp($_);
    ...
}
...

如果它只是你想要的目录,你也可以使用glob

my @xmlfiles = glob("*.xml");

答案 1 :(得分:0)

我建议使用 File :: Find :: Rule

use File::Find::Rule;

my @files = File::Find::Rule->file()->name('*.xml')->in($seach_dir);