Как распечатать все, кроме Nth, до последней строки в sed?

One Solution collect form web for “Как распечатать все, кроме Nth, до последней строки в sed?”

Часть 1

Просто тринадцатая строка:

 sed '13d' <file.txt 

И общий способ сделать дополнение к вышесказанному:

 sed '13!d' <file.txt 

Часть 2

Потому что это можно сделать:

 sed -n ':a;${P;q};N;4,$D;ba' <file.txt 

Обратите внимание, что 4 – это номер, который вам больше нужен. Поэтому, если вы хотите, чтобы последняя 10-я строка, это было бы 11 .

Тестирование с помощью seq :

 $ seq 100 | sed -n ':a;${P;q};N;4,$D;ba' 98 $ 

Попытка объяснения

 :a # define label a ${ # match the last line P # print the first line of the pattern space q # quit } N # match all lines: append the next line to the pattern 4,${ # match the range of lines 4 to the end of the file D # delete the first line of the pattern space } ba # match all lines: jump back to label a 

Ценностное дополнение Гленна Джекмана:

Это была «только N-я линия». Вот «все НО N-й линии»:

 sed -n ':a;${s/^[^\n]*\n//;p;q};N;4,${P;D};ba' 

работает с GNU sed, последовательность \n может не работать с другими seds.


Я попробовал это с BSD sed (OSX) и обнаружил, что он не совсем работает в приведенной выше форме. Проблемы выглядят так:

  1. ; используемый для разделения строк, как правило, работает, но не работает после метки
  2. BSD sed, по-видимому, требует ; после последней команды в одной строке {} группы команд, тогда как GNU sed не
  3. \n обычно можно использовать в регулярном выражении, но, по-видимому, не в выражении скобки [] . Поэтому, чтобы исключить новые строки, мы можем вместо этого использовать нечто вроде [[:alnum:][:punct:][:graph:][:blank:]] , хотя это может исключать другие символы (в частности, другие управляющие символы).

Так что это попытка более независимой от платформы версии:

 sed -n ':a ${s/^[[:alnum:][:punct:][:graph:][:blank:]]*\n//p;q;};N;4,${P;D;};ba' 

Это, похоже, работает под OSX и Ubuntu.

  • Как мне grep без пробелов?
  • Печатать текст между тегами (включительно), если обнаружен определенный текст
  • sed - найти строку из 4 чисел с предшествующим символом и добавить символ
  • Как туннелировать подчиненные данные mqtt в чистые данные (pd) в bash
  • Объяснение sed в сценарии оболочки
  • Как вставить переменную в переменную в случайном месте?
  • Дублирование каждой строки при изменении значения в каждой копии строки по-разному в Linux
  • Заполнение массива с помощью комбинации sed / echo
  • Извлечение частей строки, разделенной пробелами
  • Подсчет количества строк, имеющих число больше 100
  • Как удалить символ новой строки между двумя строками <font> \ n </ font> в unix?
  • Interesting Posts

    файловая система, бит архива

    Мульти монитор Xorg nVidia на Ubuntu 10.10 без корня?

    Как разрешить OCSP, но запретить все другие исходящие HTTP-запросы?

    Как приложение unix регистрирует огромные объемы данных?

    shadowsocks работает, но никакого эффекта

    Кто-нибудь действительно тестировал время автономной работы ноутбука под разными регуляторами процессора?

    Сохранить весь вывод терминала в файл

    сортировка имен файлов с версией

    Как скопировать домашний каталог в домашний каталог?

    Как сохранить все vim-буферы при изменении окна tmux?

    GRUB2 Вставить дополнительные модули ядра

    Как создать надежные пароли в Linux?

    Сеанс X-сервера CentOS7 зависает при отслеживании (или любой другой печати) большого количества данных через ssh

    Как добавить следующий статический адрес маршрута в / etc / sysconfig / network-scripts / route-eth0, чтобы сделать его постоянным?

    Использование convert для создания JPG?

    Linux и Unix - лучшая ОС в мире.