使用perl脚本在目录中搜索文本模式

使用perl脚本在目录中搜索文本模式,perl,grep,Perl,Grep,任何人都可以和我分享一个片段,我可以在perl文件中进行grep搜索。例子, 我需要这个grep:grep 1115852311/opt/files/treated/postpaid/* 要在perl脚本中完成,请打印所有匹配项 尝试了以下操作,但无效: my $start_dir= "\opt\files\treated\postpaid\"; my $file_name = "*"; my @filematches; opendir(DIR, "$start_dir"); @xml_file

任何人都可以和我分享一个片段,我可以在perl文件中进行grep搜索。例子, 我需要这个grep:
grep 1115852311/opt/files/treated/postpaid/*

要在perl脚本中完成,请打印所有匹配项

尝试了以下操作,但无效:

my $start_dir= "\opt\files\treated\postpaid\";
my $file_name = "*";
my @filematches;
opendir(DIR, "$start_dir");
@xml_files = grep(1115852311,readdir(DIR));
print @xml_files;

阅读是一个好的开始。如果这样做,您将看到Perl的
grep()
与Unix
grep
命令的工作方式截然不同。Unix命令只是在文件列表中查找文本。Perl版本处理任何数据列表,并返回该列表中任意布尔表达式为真的任何元素

Unix命令的Perl版本如下所示:

while (<$some_open_filehandle>) {
  print if /$some_string/;
}
运行该代码后,包含字符串的文件列表将位于
@files


您可能希望查看
glob()
,而不是
opendir()
readdir()
阅读是一个好的开始。如果这样做,您将看到Perl的
grep()
与Unix
grep
命令的工作方式截然不同。Unix命令只是在文件列表中查找文本。Perl版本处理任何数据列表,并返回该列表中任意布尔表达式为真的任何元素

Unix命令的Perl版本如下所示:

while (<$some_open_filehandle>) {
  print if /$some_string/;
}
运行该代码后,包含字符串的文件列表将位于
@files


您可能希望查看
glob()
,而不是
opendir()
readdir()
,使用下面的代码片段来实现我想要的

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

sub is_string_in_file {
  my ($filename, $string) = @_;
  open my $fh, '<', $filename 
    or die "Cannot open file \n";


while(my $line = <$fh>){
  if($line =~ /$string/){
    print $string;
    print $filename."\n";
  } 
}
  #return grep { $_ eq $string } <$fh>;
}

my @files;

my $dir = '/opt/files/treated/postpaid/';
opendir my $dh, $dir or die $!;

while (my $file = readdir($dh)) {
    is_string_in_file("$dir$file", 1115852311);
}
#/usr/bin/perl
严格使用;
使用警告;
sub是\u文件中的\u字符串\u{
我的($filename,$string)=@;

打开我的$fh,“使用下面的代码片段实现了我想要的

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

sub is_string_in_file {
  my ($filename, $string) = @_;
  open my $fh, '<', $filename 
    or die "Cannot open file \n";


while(my $line = <$fh>){
  if($line =~ /$string/){
    print $string;
    print $filename."\n";
  } 
}
  #return grep { $_ eq $string } <$fh>;
}

my @files;

my $dir = '/opt/files/treated/postpaid/';
opendir my $dh, $dir or die $!;

while (my $file = readdir($dh)) {
    is_string_in_file("$dir$file", 1115852311);
}
!/usr/bin/perl
严格使用;
使用警告;
sub是\u文件中的\u字符串\u{
我的($filename,$string)=@;

打开我的$fh,'非常感谢您的输入,它很有帮助。我使用下面的代码段,它很有效谢谢您的输入,它很有帮助。我使用下面的代码段,它很有效。我已将我的
is_string_in_file()
子例程更改为使用正则表达式检查,而不是(相当幼稚)我以前使用的字符串比较。我想你会发现
is\u string\u in_file()
子例程将更加灵活,如果你让它返回一个布尔标志(就像我的版本那样),并处理你想在它之外的任何打印。我已经将
is\u string\u in_file()
子例程改为使用正则表达式检查,而不是(相当幼稚)我以前使用过的字符串比较。我想你会发现
is_string_in_file()
子例程将更加灵活,如果你让它返回一个布尔标志(就像我的版本一样),并处理你想在它之外进行的任何打印。