正如Etan Reisner在评论中所说的那样,有一本很好的范围模式的食谱在 这个答案 .但最简单的方法是从一个模式匹配到一个文件的结尾。
awk '/WORD/,0' file
为了从包含图案的那一行开始打印,我们可以这样做。
awk 'found,0;/WORD/{found=1}' file
为了同时打印第一行中与WORD后面的WORD相匹配的部分,只需要修改最后一个动作,但为了设置RSTART和RLENGTH,用对match
的明确调用代替正则表达式是很方便的。
awk 'found,0;match($0,/WORD/){found=1;print substr($0, RSTART+RLENGTH}'
范围模式的形式是expression,expression,其含义是从与第一个表达式匹配的第一行到与最后一个表达式匹配的第一行,包括在内。这个范围会重复进行,直到文件被完全处理。
在这些例子中,第二个表达式总是评估为0(false),所以范围永远不会终止,一旦模式成功,所有行都被匹配。
同样地,解决 "打印所有行 "的另一种方法是untila pattern "将是如下的,尽管它的效率较低,因为它读取了整个文件。
awk 'NR==1,/WORD/' file
另外,如果目标是只打印模式的实例(而不是包含该模式的完整行,我们可以对原程序进行简单的修改。
awk 'match($0, /WORD/){print(sub($0,1,RSTART+RLENGTH)); exit}1'