sed – 如何删除最后n行的所有内容?

在一个窗口框(没有CYGWIN等)使用selenium你怎么能“删除所有,但最后n行”从文本文件?

在* nix上你可以得到tail / cat / wc来预处理input文件,但是你怎么用纯sed来做这个?

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

Solutions Collecting From Web of "sed – 如何删除最后n行的所有内容?"

从这个 sed单行列表中:

 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行。

不过,这真的不是西德的强项。 我只是从gnuwin32安装coreutils 。

如果你看看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工具 。