我有一个Perl脚本通过这样的输入:
while ( <INPUT> ) {
if (condition) {
# match a string 3 lines down from current line
}
}
如何在输入中跳过行并基本上“找到下一个匹配的行?”
答案 0 :(得分:3)
您可能想要从同一个文件句柄中读取,并跳到第三行,
while ( <INPUT> ) {
if (condition) {
# match a string 3 lines down from current line
<INPUT> for 1..2;
$_ = <INPUT> // last; # eof?
}
}
答案 1 :(得分:1)
我通常会为这类问题维护状态变量:
my $condition_last_met;
while ( <INPUT> ) {
if (condition) {
$condition_last_met = $.;
}
if (defined($condition_last_met) && $condition_last_met + 3 == $.)
{
# search the string in the current line
}
}
此示例假设您从未匹配上一场比赛中3行内的条件,但可以采用相同的方式处理。
答案 2 :(得分:0)
通常设置一个标志并保持计数以获得匹配字符串的特定行。比赛结束后清除。
my $conditon_flag = 0;
my $count = 0;
while (<input>)
{
if(condition)
{
$condition_flag = 1;
$count++;
}
if($condition_flag == 1 && $count == 3)
{
#match the string;
$condition_flag = 0;
$count = 0;
}
}