在 Print lines in file from the match line until end of file我了解到您可以使用 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
matched 2
Your regex /!./
is matching a literal !
followed by any character.
If your file is this:
cat a
1
matched
2
3
!4
end
然后
awk '/matched/,/!./' a
matched
2
3
!4
和:
awk '/matched/,!/./' a
匹配
2
关于regex - 使用awk打印从匹配到文件结尾的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28742712/