Распечатайте несколько строк до и после соответствия шаблону, исключая строки, соответствующие другим шаблонам

Я использую awk для Solaris для печати 5 строк до и после соответствия шаблону. В настоящее время работает следующий однострочный:

/usr/xpg4/bin/awk 'c-->0;$0~s{if(b)for(c=b+1;c>1;c--)print r[(NR-c+1)%b];print;c=a}b{r[NR%b]=$0}' b=5 a=5 s="ERROR" file 

Однако результат не является удовлетворительным. Прежде всего, он содержит нежелательные строки, такие как

  • линии с самой совпадением
  • пустые строки
  • линии, соответствующие (нежелательным) шаблонам, например
    • Удалить
    • бред какой то
    • глупый

Кроме того, существует требование, чтобы каждое основание было разделено линией с некоторыми тире.

Пример ввода:

 stupid remove keep it * MATCH keep it as well remove important * MATCH at line 2: needed also this line should be kept * MATCH at line 2: this to save very important remove keep it * MATCH keep it as well nonsense another nonsense 

Ожидаемый результат:

 keep it keep it as well --- important needed also --- this line should be kept this to save very important --- keep it keep it as well 

Как это можно достичь с помощью элегантного способа?

  • sed + как удалить второй символ «.» из строки
  • извлекать линии в соответствии с конкретным столбцом
  • Найдите строку и распечатайте все до и после в пределах диапазона
  • Добавление макроса TeX в начало файла с помощью sed (почему мой метод не работает?)
  • База данных библиотек
  • Вставить текст внутри строки в конце строки данных
  • Удалить обратную косую черту + последовательности новой строки
  • Измените определенную часть файла с помощью сценария оболочки
  • One Solution collect form web for “Распечатайте несколько строк до и после соответствия шаблону, исключая строки, соответствующие другим шаблонам”

    Хотя ожидаемый результат не ясен, я постараюсь. Если у вас есть gnu utils на Solaris, вы можете использовать gawk и ggrep очень просто:

     gawk 'NF > 0' fileName |ggrep -C5 pattern 

    Вы можете добавить | ggrep -v somePattern в конце, чтобы отфильтровать нежелательные слова.

    Interesting Posts

    Что делает установка файловой системы с user_xattr?

    Внезапное выключение ПК, датчики показывают нормальные темпы, прерывания прерывания температуры показывают 1276

    В чем разница между «dir» и «ls»?

    Где хорошее место для размещения приложений, которые собираются заранее?

    CentOS: отключить недоступный репозиторий

    Уменьшите скорость вращения вентилятора ATI GPU с помощью драйвера с открытым исходным кодом Radeon

    Grep файл в определенном поле

    гостевая ОС kvm недоступна после перезагрузки системы

    В чем разница между `fallocate -dig-holes` и` fallocate -punch-hole` в Linux?

    Лучший способ удалить выбранные сообщения электронной почты из файла mbox с помощью скрипта

    Привести сетевой интерфейс вниз, если потеряна физическая связь

    Поиск идентификатора процесса по номеру порта

    Почему нам не нужно вводить пароль для установки программного обеспечения в магазине приложений на Deepin?

    Как получить цвета на страницах man с w3m как PAGER?

    Трубная цепь с устройствами

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