从perl中的文件返回具有匹配模式的行

时间:2013-05-07 09:36:25

标签: regex perl

我需要编写一个perl脚本来提取匹配不同模式的行,然后对其进行操作。我已完成以下匹配并提取包含匹配模式的所有行:

my $filetoread = <$curr_dir/p*.out>;
my $filetoreadStrings=`strings $filetoread | egrep \"(Preparing extraction | 100.00%)\"`;
my @ftr = split('\n', $filetoreadStrings);
chomp (@ftr);

my $FirstPattern = (grep /Preparing extraction/, @ftr)[0];
my $SecondPattern = (grep /100.00% done/, @ftr)[0];
print "$FirstPattern \n";
print "$SecondPattern \n";

我只获得第二种模式的行,即使第一种模式(准备提取)存在于日志中。我认为问题在于'或'。我需要知道如何获得与模式匹配的所有行。 [$ curr_dir是我正在运行脚本的目录,P * .out是日志文件]

1 个答案:

答案 0 :(得分:1)

`... egrep \"(Preparing extraction | 100.00%)\" ...`

应该是

`... egrep \"(Preparing extraction| 100.00%)\" ...`

或只是

`... egrep "(Preparing extraction| 100.00%)" ...`

my $filetoread = <$curr_dir/p*.out>;

应该是

my ($filetoread) = <$curr_dir/p*.out>;

除非您在返回undef之前调用它,否则不要在标量上下文中调用<glob_pattern>


my @ftr = split '\n', `...`;
chomp(@ftr);

应该是

my @ftr = split /\n/, `...`;

chomp( my @ftr = `...` );