grep внутри меньше?

В настоящее время я просматриваю множество незнакомых журналов, которые ищут некоторые проблемы. Первым файлом, на который я смотрю, является Events.log, и я получаю как минимум три страницы less что, кажется, отображает одно и то же событие в разное время – событие, которое кажется довольно доброкачественным. Я хотел бы отфильтровать это событие, и в настоящее время я оставляю less и делаю что-то вроде

 grep -v "event text" Events.log | less 

Теперь это приводит к ряду других распространенных, неинтересных событий, которые я также хотел бы отфильтровать. Есть ли способ, которым я могу grep -v внутри less ? Вместо того, чтобы делать

 egrep -v "event text|something else|the other thing|foo|bar" Events.log | less 

Это поражает меня как полезную функцию при просмотре любого файла журнала – и если less это не инструмент, есть ли еще один из качеств, которые я ищу? Просто less зрительный зритель со встроенным grep .

less имеет очень мощное соответствие шаблону. На странице руководства:

& pattern

    Отображать только строки, соответствующие pattern ; строки, которые не соответствуют pattern , не отображаются. Если pattern пуст (если вы набираете & сразу после него вводите ENTER ), любая фильтрация отключается, и отображаются все строки. Несмотря на то, что фильтрация действует, амперсанд отображается в начале подсказки в качестве напоминания о том, что некоторые строки в файле могут быть скрыты.

Некоторые символы являются особыми, как в команде / :

^N или !

    Отображать только строки, которые НЕ соответствуют pattern .

^R

    Не интерпретировать метасимволы регулярного выражения; т. е. сделать простое текстовое сравнение.

____________
Некоторые символы являются специальными, если они введены в начале pattern ; они изменяют тип поиска, а не становятся частью pattern .

(Конечно, ^N и ^R представляют Ctrl + N и Ctrl + R соответственно.)

Так, например, &dns будет отображать только строки, соответствующие шаблону dns , и &!dns будет фильтровать (исключать) эти строки, отображая только строки, которые не соответствуют шаблону.

В описании команды / указано, что

    pattern – это регулярное выражение, которое распознается библиотекой регулярных выражений, предоставляемой вашей системой.

Так

  • &eth[01] отобразит строки, содержащие eth0 или eth1
  • &arp.*eth0 отобразит строки, содержащие arp а затем eth0
  • &arp|dns будут отображать строки, содержащие arp или dns

И ! может инвертировать любой из вышеперечисленных. Таким образом, команда, которую вы хотели бы использовать для примера в своем вопросе:

 &!event text|something else|the other thing|foo|bar 

Также используйте / pattern и ? pattern ? pattern для поиска (и n / N для перехода к следующему / предыдущему).

Основываясь на ответе Ориона , страница less(1) man описывает

/ pattern

    Ищите вперед в файле для N-й строки, содержащей pattern . N † по умолчанию равно 1. pattern – это регулярное выражение, которое распознается библиотекой регулярных выражений, предоставляемой вашей системой. Поиск начинается с отображаемой второй строки (но см. Параметры -a и -j , которые меняют это значение).

Определенные символы являются специальными, если они введены в начале pattern ; они изменяют тип поиска, а не становятся частью pattern :

^N или !

    Найдите строки, которые НЕ соответствуют pattern .

^E или *

    Поиск нескольких файлов. То есть, если поиск достигает КОНЕЦ текущего файла без поиска соответствия, поиск продолжается в следующем файле в списке командной строки.

^F или @

    Начните поиск в первой строке файла FIRST в списке команд, независимо от того, что в настоящее время отображается на экране, или настроек параметров -a или -j .

^K

    Выделите любой текст, соответствующий pattern на текущем экране, но не переходите к первому совпадению (текущая позиция KEEP).

^R

    Не интерпретировать метасимволы регулярного выражения; т. е. сделать простое текстовое сравнение.

____________
Командам может предшествовать десятичное число, называемое N в описаниях …

(Конечно, ^N и ^E и т. Д. Представляют Ctrl + N и Ctrl + E и т. Д.)

Оказывается, что & pattern и / pattern работают хорошо вместе. Например, команды

  • &!arp|dns Введите
  • / Ctrl + K fail|fatal|fault|sd[az][0-9] Введите

введённый в любом порядке, скроет (исключает) все строки, содержащие arp или dns (например, grep -v ), а затем в остальных строках выделите все случаи fail , fatal , fault или всего, что похоже на имя Устройство SCSI ( sd[az][0-9] ). Обратите внимание, что строки, содержащие arp или dns , а также fail или любые другие опасные слова, не отображаются.