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

Windows sed-如何删除除最后n行以外的所有内容?,windows,sed,Windows,Sed,在使用sed的windows框(没有CYGWIN等)上,如何从文本文件中“删除除最后n行以外的所有行” 在*nix上,您可以让tail/cat/wc参与预处理输入文件,但如何使用纯sed实现这一点 [FWIW sed是GNU sed;平台是Windows 2003]。来自sed一行程序: sed -e :a -e '$q;N;11,$D;ba' 在Windows上: sed.exe -e :a -e "$q;N;11,$D;ba" 这个例子适用于n=10。将11替换为n+1。它基本上是通过在

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

在*nix上,您可以让tail/cat/wc参与预处理输入文件,但如何使用纯sed实现这一点

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

来自sed一行程序:

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

sed.exe -e :a -e "$q;N;11,$D;ba"
这个例子适用于n=10。将11替换为n+1。它基本上是通过在模式空间中保持一个运行列表来工作的。对于前10行,它只是附加到模式空间(N),然后循环到开头。对于11及更高版本,它还会删除图案空间的第一行。最后,在($)处,它退出,这将自动打印最后的n行

不过,这并不是塞德的强项。我只需要从gnuwin32安装。

从sed one liners安装:

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

sed.exe -e :a -e "$q;N;11,$D;ba"
这个例子适用于n=10。将11替换为n+1。它基本上是通过在模式空间中保持一个运行列表来工作的。对于前10行,它只是附加到模式空间(N),然后循环到开头。对于11及更高版本,它还会删除图案空间的第一行。最后,在($)处,它退出,这将自动打印最后的n行


不过,这并不是塞德的强项。我只想从gnuwin32安装。

如果您查看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而不是tail来让你的生活变得复杂呢?使用最适合工作的工具。仅供参考,您也可以下载。

如果您查看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而不是tail来让你的生活变得复杂呢?使用最适合工作的工具。仅供参考,您也可以下载。

为什么这有
sed
但没有其他内容?顺便说一句,如果您事先知道有多少行,就可以批量执行此操作。如果你愿意把这个文件翻两遍,你可以批量计算出来。我不知道为什么有些人坚持用这种方式来束缚自己。正确的答案是使用为工作准备的工具(tail)。您不需要完整的CygWin,GnuWin32以本机形式提供所有UNIX工具,而不需要CygWin DLL。为什么它只有
sed
而没有其他功能?顺便说一句,如果您事先知道有多少行,就可以批量执行此操作。如果你愿意把这个文件翻两遍,你可以批量计算出来。我不知道为什么有些人坚持用这种方式来束缚自己。正确的答案是使用为工作准备的工具(tail)。您不需要完整的CygWin,GnuWin32以本机形式提供所有UNIX工具,如果不需要CygWin DLL,+1作为使用正确工具的建议-我不在乎自己如何扭曲
sed
到一个更适合tail的任务:-)我不知道GNU win32工具的存在-感谢指针。它需要能够从可移动介质(这是我使用sed的方式)工作,但GNU实用程序通常是这样的,所以这可能是一个好的解决方案。除此之外(@paxdiablo)Windows没有“尾巴”。。。否则我就用它;-)@格老孔。GNU工具只是单个的exe文件。您只需将它们全部放入您的可移动媒体中即可。+1对于使用正确工具的建议-我毫不在乎如何将
sed
扭曲到更适合tail的任务:-)我不知道GNU win32工具的存在-感谢指针。它需要能够从可移动介质(这是我使用sed的方式)工作,但GNU实用程序通常是这样的,所以这可能是一个好的解决方案。除此之外(@paxdiablo)Windows没有“尾巴”。。。否则我就用它;-)@格老孔。GNU工具只是单个的exe文件。你只要把它们都放到你的可移动媒体上就行了。太好了。至少在我的机器上记录一下,如果你试图使用这些单引号,你会收到一条丑陋的信息,所以。。。sed.exe-e:a-e“$q;N;11,$D;ba”in.txt>out.txt。。。这是一条路要走。正如我上面提到的,我不知道科鲁蒂尔家族,但正如你所说的那样,这会让生活更轻松。。。这就是路,太好了。至少在我的机器上记录一下,如果你试图使用这些单引号,你会收到一条丑陋的信息,所以。。。sed.exe-e:a-e“$q;N;11,$D;ba”in.txt>out.txt。。。这是一条路要走。正如我上面提到的,我不知道科鲁蒂尔家族,但正如你所说的那样,这会让生活更轻松。。。这是一条路要走。