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

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

############### # 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, но это не работает, потому что в каждом файле может быть разное количество строк в секции до и после шаблона интерстинга.

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

  • Поиск среди содержимого большого количества текстовых файлов?
  • Значение Grep из json-файла
  • использование xargs для grep нескольких шаблонов
  • Печать текста между многострочными разделителями
  • Проблема с grep на нескольких файлах и отсутствие получения желаемого результата
  • grep для конкретного процесса в ps, но не для самой команды grep
  • Поиск и фильтрация текста в больших файлах журнала
  • Grep и игнорирование ведущих пробелов
  • 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

    Действительно ли мне нужна опция -dmS на экране для стабильной работы фоновой работы?

    Как отключить символическую ссылку CentOS?

    Загружать псевдонимы из файла .bashrc при использовании sudo

    Как создать сетевой интерфейс USB для передачи Интернета на телефон Android?

    заменяя третье вхождение шаблона, используя sed

    Нельзя использовать свободное пространство в файловой системе

    Выход PDF с правильными пробелами в примерах кода

    Преобразование даты / времени в текущий JDN

    Переопределение цвета оттенка

    Проверьте, какие устройства сетевого блока используются

    Как получить файлы, загруженные yum?

    Проблемы с шрифтом для конкретного пользователя в разных приложениях

    Вычислить медианное значение для столбца и сказать, если это значение «ОК» или «ОШИБКА», если оно находится в допустимом диапазоне

    Каковы методы защиты файлов домашних папок от других приложений, работающих как один и тот же пользователь?

    Приоритет логических операторов по сравнению с точкой с запятой

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