Как grep для нескольких шаблонов на нескольких строках?

Точнее

Some text begin Some text goes here. end Some more text 

и я хочу извлечь весь блок, который начинается с «begin» до «end»

с awk мы можем сделать

 awk '/begin/,/end/' text 

как сделать с grep ? Есть ли какие-либо grep реализации на каком-то * nix, с которым это можно сделать?

One Solution collect form web for “Как grep для нескольких шаблонов на нескольких строках?”

grep , то есть g/re/p – это основной инструмент, позволяющий сопоставлять строки, которые соответствуют e epression.

Вы хотите больше здесь, как s sream it itor:

 sed '/^begin$/,/^end$/!d' 

или более общий инструмент обработки текста с расширенным языком, например awk , perl … как вы уже выяснили.

Сказав это, некоторые реализации grep могут пойти немного дальше.

 pcregrep -M '(?s)^begin$.*?^end$' 

Это использует многострочный режим ( -M ); (?s) переключает флаг s в регулярном выражении PCRE, так что . также соответствует символам новой строки.

С текущей версией pcregrep она не будет гарантированно работать, если begin и end не более чем на 20kiB (или указанный размер буфера).

Например, он будет соответствовать

 (seq 12091; echo begin; seq 4315; echo end; seq 10) | pcregrep -M '(?s)^begin$.*?^end$' 

Но не в:

 (seq 12091; echo begin; seq 4316; echo end; seq 10) | pcregrep -M '(?s)^begin$.*?^end$' 

Или с GNU grep созданным с поддержкой PCRE, и при условии, что файл не содержит символов NUL:

 grep -zoP '(?s)^begin$.*?^end$' 

Однако это означает, что grep будет загружать весь файл в память перед началом поиска, поэтому не следует использовать, за исключением небольших файлов.

В любом случае, grep – это не лучший способ пойти сюда.

  • результат фильтра сверху
  • «Sed» переписать файл для отображения целых чисел и удалить оставшиеся символы
  • Добавить строку суффикса в конец каждой строки?
  • Как сказать «grep -w», какие символы составляют «слова»?
  • используя команды grep и wc для решения проблемы
  • Извлечь номер строки файла, который имеет ненулевое значение перед указанной строкой
  • Как сделать pgrep первым аргументом командной строки?
  • Почему этот «grep -v» работает не так, как ожидалось?
  • сохранить только определенную часть строки в определенном столбце
  • Быстрый способ получить информацию из огромного файла журнала в unix
  • grep ключевое слово из вывода Mplayer и отправить остальное в файл
  • Как grep строка в файле и выводить число рядом со строкой
  • Interesting Posts

    Установка OpenBSD на компьютере под управлением Linux

    Почему существуют опции модуля и параметры драйвера – например, для модуля i915?

    Невозможно выполнить запись в / dev / console через узел не в / dev

    Как быстро сканировать беспроводные сети

    cd, просто набрав имя каталога?

    Маршрутизация локальной сети через OpenVPN на OpenBSD 5.5

    Нужно ли клиентам CUPS устанавливать PPD локально?

    Определите, есть ли активный рабочий стол VNC и его номер

    добавьте «#» в начале выбранных строк в файле

    ssh -X foo @ host, затем su bar, а затем запустите приложение X с локальным дисплеем, в то время как бар также войдет в систему?

    Gentoo Portage. Что именно делает команда revdep-rebuild?

    удаление на месте строк журнала со старыми отметками времени

    Измерение скорости обмена данными между процессами

    Как я могу определить, есть ли оставшиеся завершенные транзакции Yum для завершения?

    Обнаруживать, если программа должна регистрироваться в журнале systemd или stdout

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