0

我需要编写一个 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 是日志文件]

4

1 回答 1

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>;

不要<glob_pattern>在标量上下文中调用,除非你调用它直到它返回 undef。


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

应该

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

或者

chomp( my @ftr = `...` );
于 2013-05-07T10:05:13.867 回答