这个awk命令如何工作?

Max*_*din 4 awk

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

awk '/pattern/,0'
Run Code Online (Sandbox Code Playgroud)

有人可以解释这个命令是如何工作的 awk如何解析'/ pattern /,0'?

(顺便说一句,我没有提出这个;它发布在compgroups.net上.)

tor*_*rek 5

根据awk手册页:

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

模式可以由用逗号分隔的两个模式组成; 在这种情况下,通过第二图案的出现,从第一图案的出现开始对所有行执行动作....

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

另一个例子,比较:

jot 10
Run Code Online (Sandbox Code Playgroud)

有:

jot 10 | awk 'NR==4,NR==6 { printf("line %d: %s\n", NR, $0) }'
Run Code Online (Sandbox Code Playgroud)

  • 否:`/ pattern /`是单地址形式,因此它只匹配与模式匹配的行.双地址表单在第一个匹配时触发,在第二个匹配时再次关闭. (2认同)