这个awk命令是如何工作的?

这个awk命令是如何工作的?,awk,Awk,以下非常简洁的命令将打印图案第一次出现(包括第一次出现)后的所有行: 有人能解释一下这个命令是如何工作的吗?awk如何解析“/pattern/,0” (顺便说一句,我没有想到这一点;它是发布在上的。)根据awk手册页: 模式是正则表达式的任意布尔组合(带!|&&&) 表达式和关系表达式 一个模式可以由两个以逗号分隔的模式组成;在这个 在这种情况下,将对从出现 第一个模式虽然出现了第二个 这里第一个是/pattern/,第二个是文本常量0,这是false。因此,这从匹配的第一行开始,当一行根本不存

以下非常简洁的命令将打印图案第一次出现(包括第一次出现)后的所有行:

有人能解释一下这个命令是如何工作的吗?awk如何解析“/pattern/,0”


(顺便说一句,我没有想到这一点;它是发布在上的。)

根据
awk
手册页:

模式是正则表达式的任意布尔组合(带!|&&&) 表达式和关系表达式

一个模式可以由两个以逗号分隔的模式组成;在这个 在这种情况下,将对从出现 第一个模式虽然出现了第二个

这里第一个是
/pattern/
,第二个是文本常量
0
,这是false。因此,这从匹配的第一行开始,当一行根本不存在时停止,这只发生在文件结束后

另一个例子是,比较:

jot 10
与:


因此,
awk'/foo/,/bar/{print$0}文件
将打印文件中从单词
foo
bar
的每一行

这种
/foo/,/bar/
语法称为范围模式。如果第一个正则表达式常量
/foo/
匹配,则将执行块,直到第二个正则表达式常量
/bar/
匹配为止。通过将第二个正则表达式常量设置为0(即false),它将永远不会匹配,因此块将在每一行上执行,直到文件结束


awk
中,如果没有为某个条件指定要执行的
,则执行默认块{print$0}

否:
/pattern/
是单个地址表单,因此它只匹配与该模式匹配的行。双地址表单在第一次匹配时触发,在第二次匹配时再次关闭。修复前一条注释的措辞为时已晚,它应该在第二次匹配后显示“after”。(例如,尝试上面的
jot
jot 10
jot 10 | awk 'NR==4,NR==6 { printf("line %d: %s\n", NR, $0) }'