печатать различное количество строк до и после шаблона

У меня есть каталог с тысячами файлов со следующим повторяющимся шаблоном, содержащим сотни разделов –

############### # Section 1 ############### some text more text some more text some text more text some more text ############### # Section 2 ############### some text more text some more text interesting-pattern some text more text some more text ############### # Section 3 ############### some text more text some more text some text more text some more text 

Что мне нужно сделать, так это выяснить способ извлечь всю СЕКУНДУ, где существует «интересный шаблон».

Я попытался сделать grep -iEr 'интересный шаблон' с флагами -A и -B, но это не работает, потому что в каждом файле может быть разное количество строк в секции до и после шаблона интерстинга.

Каков наилучший способ сделать это?

  • Как я могу использовать инструменты unix с кириллическим текстом?
  • Как grep выводить программу, но также нормально выводить вывод?
  • Как найти адрес в большом файле с grep?
  • grep несколько строк, подсчет строк, эхо-выход для каждой строки
  • Селективное извлечение данных
  • Список файлов, содержащих меньше N строк, соответствующих шаблону / строке
  • Как объединить grep с несколькими аргументами и разными выходными переключателями
  • grep * струнаA *
  • One Solution collect form web for “печатать различное количество строк до и после шаблона”

    Это не работа для grep, но для лучшего инструмента, такого как awk.

    Легким обходным путем является использование gnu awk с настраиваемым разделителем данных RS, например Section .

    Используя слово «Раздел» для разделения строк, все, что находится между словами Section 1 и Section 2 будет рассматриваться как одна строка для awk.
    То же самое для раздела 2 – раздел 3 и т. Д.

    Теперь вам нужно только напечатать правильную строку «line» = «line», которая содержит interesting-pattern .

     $ awk -v RS="# Section " '/interesting-pattern/{print RT $0}' file1 # Section 2 ############### some text more text some more text interesting-pattern some text more text some more text ############### 

    Поскольку gnu awk может принимать регулярное выражение в RS (Record Separator), вы также можете применить в RS нечто более сложное:

     $ awk -v RS="###############\n# Section " '/interesting-pattern/{print RT $0}' ############### # Section 2 ############### some text more text some more text interesting-pattern some text more text some more text 

    PS: {print RT указывает awk на печать используемого в настоящее время разделителя записей

    Interesting Posts

    Можете ли вы установить образ ext2 с помощью FUSE в качестве промежуточного?

    Извлечь только часть версии пакета с именем bash

    Как я рекурсивно устанавливаю атрибут, созданный датой, для атрибута с измененной датой в NTFS-3G?

    Лучший способ освободить место на диске от удаленных файлов, которые открыты

    Соответствие n имени файла письма с ls

    Многовариантные для циклов

    Почему tmux может быть установлен только один раз на сеанс оболочки?

    Запуск приложения сводится к минимуму в системе с минимальным X-сервером

    startx autologin не запускается в / etc / inittab после обновления Debian Jessie

    Есть ли способ связать TAB так, чтобы он выводил 2 пробела?

    Как получить хронологический список обновлений пакетов в debian?

    Что определяет, может ли исполняемый файл запускаться в разных независимых процессах одновременно?

    Почему «while .. read .. << EOL» выполняет расширение переменной, но <файл и | не?

    Как использовать grep в столбце?

    Где хранятся настройки Wi-Fi сети NetworkManager?

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