以下命令打印文件直到匹配WORD
awk '1;/WORD/{exit}' file
但是如何打印文件从字符串 WORD 到文件末尾不包括字符串 WORD?
最佳答案
正如 Etan Reisner 在评论中所说,this answer 中有一本很好的范围模式食谱.但从模式到文件末尾的最简单匹配方法是:
awk '/WORD/,0' file
为了从包含模式的行之后的行打印,我们可以改为这样做:
awk 'found,0;/WORD/{found=1}' file
要在 WORD 之后也打印第一行匹配 WORD 的部分,只需要修改最后一个 Action ,但是用显式调用 match
替换正则表达式很方便设置 RSTART 和 RLENGTH 的顺序:
awk 'found,0;match($0,/WORD/){found=1;print substr($0, RSTART+RLENGTH}'
范围模式有表达式,表达式的形式,意思是从匹配第一个表达式的第一行开始匹配到匹配最后一个表达式的第一行,包括在内。重复该范围,直到文件被完全处理。
在这些示例中,第二个表达式的计算结果始终为 0(假),因此范围永远不会终止,一旦模式成功,所有行都会匹配。
类似地,另一种解决“打印所有行直到一个模式”的方法如下,尽管它读取整个文件效率较低:
awk 'NR==1,/WORD/' file
此外,如果目标是只打印模式实例(而不是包含模式的完整行,我们可以对原始程序进行简单修改:
awk 'match($0, /WORD/){print(sub($0,1,RSTART+RLENGTH)); exit}1'
关于linux - 如何从匹配字符串打印文件直到 EOF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29082229/