Intereting Posts
Выделите сегодня в Mac Одновременное подключение к одному IP через два сетевых интерфейса Невозможно клонировать жесткий диск с dd. Невозможно установить Linux Mint Cinnamon или Ubuntu, в то время как переключаемая графика включена Рекомендация по файловой системе для встроенного устройства – ОЗУ или USB Комбинированные переменные с переменными входами в одну строку logrotate переименовывает исходный файл в mylog.log.1, но затем не использует mylog.log Конфигурационный файл Piping для genkernel Команда Объяснение: mkdir -p /root/.ssh Fluxbox для открытия xterm или переключения на существующий Режим вставки во всех окнах в VI Как получить дополнительную информацию об этом устройстве? Скрипт / команда для копирования внутреннего IP-адреса непосредственно в буфер обмена Потоковая передача всего локального аудио на сервер Icecast Как я могу заставить GRUB правильно настроить экран?

Получить текст между словом и последней строкой?

Согласно ответам на вопрос «Переполнение стека» Как использовать sed / grep для извлечения текста между двумя словами? , мы можем получить текст между двумя словами:

sed -n "/first/,/second/p" file 

Но что, если я хочу получить текст между словом и последней строкой файла, как в следующем?

 sed -n "/word/,/lastline/p" file 

Включая последнюю строку:

 sed -n '/word/,$p' 

Это соответствует первому вхождению word до последней строки и печатает все совпадения.

Не включая последнюю строку:

 sed '/word/,$!d;$d' 

… который удаляет отрицательные совпадения, а затем удаляет последнюю строку.

И чтобы получить только последний матч до последней строки, вам нужно попробовать немного сложнее:

  sed -e :n -e '/\n.*word/D;N;$q;bn' 

Он петли – он никогда не завершает нормальный цикл серии sed а вместо этого добавляет следующую строку ввода в буфер пространства пространства рисунков и b снова загорается, чтобы сделать это снова. Но когда он имеет по крайней мере две строки в пространстве шаблонов и последнее совпадение, оно удаляет все в буфере, но строку, соответствующую слову . На последней строке он просто quits и прерывает цикл. Так что печатается все, начиная с последней строки, содержащей слово до последней строки.

Хммм … может быть, я сделал это сложнее, чем это должно быть:

 sed 'H;$x;/word/h;$!d' 

При этом каждая строка добавляется для удержания пространства. Но строки, соответствующие слову, затем перезаписывают пространство удержания. Каждая строка в пространстве шаблонов, которая не является последней строкой, удаляется. И на последней строке, после того, как она добавлена ​​для удержания пробела, пространства удержания и шаблона заменяются (в случае, если последняя строка также содержит слово), и все, начиная с последнего слова, переписавшего удержание, печатается.

Также можно использовать awk

Включая совпадение с окончанием файла

 awk '/word/{x=1}x' file 

После первого совпадения до конца файла

 awk 'x;/word/{x=1}' file