sed - как удалить все, кроме последних n строк? - PullRequest
0 голосов
/ 08 июля 2010

В окне Windows (без CYGWIN и т. Д.) С помощью sed, как вы можете «удалить все, кроме последних n строк» ​​из текстового файла?

На * nix вы можете подключить tail / cat / wc кпредварительно обработать входной файл, но как вы можете сделать это, используя чистый sed?

[FWIW sed - это GNU sed;платформа - Windows 2003].

Ответы [ 2 ]

2 голосов
/ 08 июля 2010

Если вы посмотрите на информационную страницу sed для GNU, вы можете увидеть пример использования tail версии sed

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 win32 tools .

1 голос
/ 08 июля 2010

С этот список однострочников 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 строк.

Правда, это не сильный костюм Седа. Я бы просто установил coreutils из gnuwin32.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...