使用perl脚本在目录中搜索文本模式
任何人都可以和我分享一个片段,我可以在perl文件中进行grep搜索。例子, 我需要这个grep:使用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
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()
与Unixgrep
命令的工作方式截然不同。Unix命令只是在文件列表中查找文本。Perl版本处理任何数据列表,并返回该列表中任意布尔表达式为真的任何元素
Unix命令的Perl版本如下所示:
while (<$some_open_filehandle>) {
print if /$some_string/;
}
运行该代码后,包含字符串的文件列表将位于@files
中
您可能希望查看
glob()
,而不是opendir()
和readdir()
阅读是一个好的开始。如果这样做,您将看到Perl的grep()
与Unixgrep
命令的工作方式截然不同。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()
子例程将更加灵活,如果你让它返回一个布尔标志(就像我的版本一样),并处理你想在它之外进行的任何打印。