使用SED获取巨大文本文件的最后n行

时间:2013-08-26 21:29:26

标签: linux text sed

如何使用“sed”命令获取大文本文件的最后n行(例如A.txt)并将它们复制到新的文本文件(例如B.txt)中?我不想从A.txt中删除这些行。

3 个答案:

答案 0 :(得分:26)

你没有。您可以使用tail -n NUMLINES

tail -n 100 A.txt > B.txt

答案 1 :(得分:10)

以下是使用sed打印文件的最后10行的方法:

sed -e :a -e '$q;N;11,$D;ba' 

如果你计划在这些行上执行更多的sed命令,你应该只使用它。否则,tail命令专为此作业而设计。

答案 2 :(得分:3)

使用GNU sed,这里是如何得到最后10行:

(对于n行,替换11,用n + 1)

sed -ne':a;$p;N;11,$D;ba' A.txt > B.txt

注意:在我的Mac上,使用MacPorts,GNU sed被调用为gsed。要使用Apple sed,您必须将标签分开:sed -ne':a' -e'$p;N;11,$D;ba' *

说明:

sed -ne'调用没有自动打印模式空间的sed

用于循环的

:a标签

最后一行

$p,打印模式空间,然后退出

N啜饮下一行

第11行到最后一行的

11,$D,从模式空间中删除第一行(即[^ \ n] * \ n)

ba'循环到:a

另外

由于循环,sed会不断地将下一行附加到模式空间。在第11行和最后一行(11,$D)之后sed开始从模式空间中删除第一行。在最后一行打印模式空间(`$ p'),其中包含最近10条最潦草的行(文件A.txt的最后10行)。