sed - 如何删除除最后n行之外的所有内容?

时间:2010-07-08 01:15:34

标签: windows sed

在使用sed的Windows框(没有CYGWIN等)上,如何从文本文件中“删除除最后n行以外的所有行”?

在* nix上你可以让tail / cat / wc参与预处理输入文件,但你怎么能用纯sed做到这一点?

[FWIW sed是GNU sed;该平台是Windows 2003]。

2 个答案:

答案 0 :(得分:2)

如果查看GNU sed信息页面,可以看到使用sed的tail版本

的示例
4.13 Printing the Last Lines
============================

Printing the last N lines rather than the first is more complex but
indeed possible.  N is encoded in the second line, before the bang
character.

   This script is similar to the `tac' script in that it keeps the
final output in the hold space and prints it at the end:

     #!/usr/bin/sed -nf

     1! {; H; g; }
     1,10 !s/[^\n]*\n//
     $p
     h

但是你为什么要用sed而不是尾巴来让你的生活变得复杂?使用最合适的工具。仅供参考,您也可以下载GNU win32 tools

答案 1 :(得分:1)

来自sed one-liners的this list

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

在Windows上:

sed.exe -e :a -e "$q;N;11,$D;ba"

该示例用于n = 10.用n + 1替换11.它基本上通过在模式空间中保持运行列表来工作。对于前10行,它只是附加到模式空间(N),然后循环到开头。对于11及更高版本,它还会删除模式空间的第一行。最后,在($),它退出,自动打印最后n行。

但是,这真的不是sed的强项。我只想从gnuwin32安装coreutils