13

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

4

3 回答 3

38

你没有。你用tail -n NUMLINES它。

tail -n 100 A.txt > B.txt
于 2013-08-26T21:30:26.073 回答
13

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

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

如果您打算在这些行上执行更多 sed 命令,您可能应该只使用它。否则,该tail命令是为此作业设计的。

于 2013-08-26T21:31:47.263 回答
9

使用 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,$D从第 11 行到最后一行,从模式空间中删除第一行(即 [^\n]*\n)

ba'循环到:a

更远

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

于 2017-12-27T20:39:19.640 回答