下面这个非常简洁的命令,将打印出第一次匹配(包括第一次匹配)之后的所有行:
awk '/pattern/,0'
有人能解释一下这个命令是如何工作的吗?awk如何解析'/pattern/,0'?
(顺便说一句,这不是我想出来的,是在compgroups.net上发布的。)
awk '/pattern/,0'
有人能解释一下这个命令是如何工作的吗?awk如何解析'/pattern/,0'?
(顺便说一句,这不是我想出来的,是在compgroups.net上发布的。)
awk
手册:/pattern/
,第二个模式是字面常量0
,表示假。因此,它从匹配的第一行开始,并在不存在行时停止,这只在文件结束后发生。jot 10
使用:
jot 10 | awk 'NR==4,NR==6 { printf("line %d: %s\n", NR, $0) }'
awk '/foo/,/bar/{print $0}' file
会打印文件中从单词foo
到bar
的每一行。/foo/,/bar/
语法被称为范围模式。如果匹配第一个正则表达式常数/foo/
,则该块将执行,直到匹配第二个正则表达式常数/bar/
。通过将第二个正则表达式常量设置为0 (即false),它永远不会被匹配,因此该块在每一行上执行,直到文件结尾。awk
中,如果您没有为条件指定要执行的block
代码,则执行默认块{print $0}
。
/pattern/
是单地址形式,因此它只匹配与模式匹配的行。双地址形式在第一次匹配时触发,并在第二次匹配时关闭。 - torekjot
)。 - torek