Awk:将行号与结束正则表达式模式匹配



如何让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图案,停止打印行(以上条件将失败(

相关内容

  • 没有找到相关文章

最新更新