如何让awk在匹配开始时匹配行号,并在模式中结束匹配?
我尝试使用1
和/end/
的结束模式,但失败了:
$ echo -e 'anbncnendnenfngn' |awk '1,/end/ {print $0}'
a
b
c
end
e
f
g
但一种全模式的方法是有效的:
$ echo -e 'anbncnendnenfngn' |awk '/b/,/end/ {print $0}'
b
c
end
问题是:如何在一个范围的开头使用行号?
尝试:
echo -e 'anbncnendnenfngn' | awk '(NR == 1),/end/'
如果您没有启动条件,您可以直接使用
$ awk '1; /end/{exit}'
使用sed
可能更容易
$ sed '/end/q'
查看在线演示:
echo -e 'anbncnendnenfngn' | awk 'BEGIN{f=1} {if(f) print} /end/{f=0}'
详细信息:
BEGIN{f=1}
-将f
标志设置为1
(打印找到的行({if(f) print}
-如果f
不是0
,则打印行/end/{f=0}
-一旦找到end
图案,停止打印行(以上条件将失败(