说明蓝色=命令名称

      浅绿=命令参数

      浅蓝=选项

      紫色=目录

      系统环境:CentOS  5.8  x86_64

      awk版本: GNU Awk 3.1.5

awk脚本:seq 1 12|awk 'i++,/3/'

 

awk脚本:seq 1 12|awk '!i++,/3/'

 

解析

多行匹配的原则是 真到真 即逗号前的 条件为真时开始下行匹配直到逗号后面的条件为真时退出本组匹配继续寻找下一组,如果后面的一直为假,则匹配到末尾。

第一条脚本,第一行i=0(awk的默认参数值为0),i++先判读i值在做自加运算,所以第一行假,继续往下行匹配,第二行i值为1,为真(awk中非0为真),打印第二行。第三行i的值为2,为真,同时逗号后条件为真,打印,并结束本组匹配,继续下一组。第四行,i的值为3,为真,打印。。。。。。直到结尾也木有能匹配到/3/全部打印。

第二条脚本,第一行i=0(awk的默认参数值为0),i++先判读i值在做自加运算,取反为真,打印本行并开始本组匹配,直到匹配到3,逗号后面的条件为真结束本组。以为逗号前面的非0值取反一直为假不能在匹配到新的,退出。

例子:seq 1 12|awk -v a=4 '!a--,/1/'