以下非常简洁的命令将在第一次出现模式(包括第一次出现)后打印所有行:
awk '/pattern/,0'
Run Code Online (Sandbox Code Playgroud)
有人可以解释这个命令是如何工作的 awk如何解析'/ pattern /,0'?
(顺便说一句,我没有提出这个;它发布在compgroups.net上.)
根据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)