有没有办法再次开始顶级处理? next
执行此操作但它也从输入中读取一行。我想这样做没有读另一行。
我的用例是当我看到行匹配pattern1
时,我想停止处理,直到看到匹配pattern2
的行。如果有ungetline
我会做的
/pattern1/ {
getline;
while (! /pattern2/ ) { getline; }
ungetline; }
我可能会陷入程序性方法
答案 0 :(得分:1)
要解决你描述的情况,我会使用以下方法:
BEGIN { skip = 0 }
/pattern1/ { skip = 1 ; next }
skip && /pattern2/ { skip = 0 }
!skip && /text/ {
print "Found text which is not between pattern1 and pattern2"
next
}
!skip {
print $0
}
!skip
仅在skip
为0时启用最后两条规则。
但这也应该有效:
BEGIN { skip = 0 }
/pattern1/ { skip = 1 ; next }
skip && /pattern2/ { skip = 0 }
skip { next }
/text/ {
print "Found text which is not between pattern1 and pattern2"
next
}
{ # else...
print $0
}
注意:
pattern2
。 (如果不需要,请将next
放入其操作中。)
BEGIN
规则实际上不是必需的,但在某种程度上很好地记录了skip
变量的特殊含义。