使用awk从匹配到文件结尾打印行

时间:2015-02-26 12:38:44

标签: regex awk

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/,/!./' aawk '/matched/,0' a都返回:

matched
2

3
4
end

awk '/matched/,!NF' a返回:

matched
2

1 个答案:

答案 0 :(得分:3)

你在错误的地方感叹。将它保持在正则表达式之外,以否定匹配

awk '/matched/,!/./' a
matched
2


您的正则表达式/!./与文字!匹配,后跟任何字符。

如果您的文件是:

cat a
1
matched
2

3
!4
end

然后

awk '/matched/,/!./' a
matched
2

3
!4

awk '/matched/,!/./' a
matched
2