这是我的日志
connect
called
menu
transfer
disconnect
connect
called
transfer
disconnect
我想选择这个词,当这个词紧挨着, 当这个词喜欢
菜单 传递 断开意味着,
我应该选择转移,
这个词如果我的流程像
连接 叫 传递 断开
然后我不想选择转移,
这个词答案 0 :(得分:2)
您可以尝试以下方式:
更新为标准Perl发行版:
#!/usr/bin/perl
use strict;
use warnings;
my $count = 0;
while(<DATA>) {
chomp;
$count = 1 if $_ eq 'connect';
if ($count == 3) {
print "2 words after is : $_\n";
$count = 0;
}
$count++ if $count;
}
__DATA__
connect
called
menu
transfer
disconnect
connect
called
transfer
disconnect
<强>输出:强>
2 words after is : menu
2 words after is : transfer
答案 1 :(得分:1)
使用正则表达式来解决此问题将假设您将日志文件放在单个变量中。如果您的日志文件不是很大,您可以按如下方式执行此操作:
use File::Slurp qw(slurp);
my $log = slurp('path/to/logfile');
或者,如果您不想使用非标准Perl模块:
{
local $/;
open my $fh, '<', 'path/to/logfile' or die $!;
my $log = <$fh>;
close $fh;
}
要获取传输后的单词与“connect”匹配的实例,但仅限于流程为menu -> transfer -> ...
的情况,您可以执行以下操作:
while ( $log =~ m{menu\s+transfer\s+(\w*connect\w*)}g ) {
print "transfer -> $1\n";
}
答案 2 :(得分:0)
为什么要使用正则表达式?这不是一个好的用例。刚
while (<>) { chomp; last if ($_ eq 'connect'); }
$_ = <>;
print;
会做的。