在从匹配行到文件结尾的文件中打印行中,我了解到可以0
在范围表达式中使用awk
来匹配直到文件结尾:
awk '/matched/,0' file
但是,今天我开始玩这个游戏0
,发现它也可以使用:
awk '/matched/,/!./' file
我猜0
是可行的,因为在范围表达式/regex1/,/regex2/
中打印了行,直到regex2
计算结果为True。而且由于0
评估为False,因此永远不会发生,最终将打印所有行。这是正确的吗?
但是,/!./
我可以想象这可以一直工作到找到没有任何字符的行,就像我们说的那样awk '/matched/,!NF'
。但事实并非如此:相反,它始终评估为False。是什么原因呢?
$ cat a
1
matched
2
3
4
end
两者awk '/matched/,/!./' a
并awk '/matched/,0' a
返回:
matched
2
3
4
end
而awk '/matched/,!NF' a
返回:
匹配的 2
您在错误的地方感到惊叹。像这样将其保留在正则表达式之外以取消匹配:
awk '/matched/,!/./' a
匹配的 2
您的正则表达式/!./
匹配的是文字,!
后跟任何字符。
如果您的文件是这样的:
cat a
1
matched
2
3
!4
end
然后
awk '/matched/,/!./' a
matched
2
3
!4
和:
awk '/matched/,!/./' a
匹配的 2
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句