grep исключает несколько строк

55

Я пытаюсь увидеть файл журнала с помощью tail -f и хочу исключить все строки, содержащие следующие строки:

"Nopaging the limit is"`  and `"keyword to remove is"

Я могу исключить одну строку следующим образом:

tail -f admin.log|grep -v "Nopaging the limit is"

Но как я исключаю строки, содержащие любой из string1 или string2.

Теги:

7 ответов

53

Два примера фильтрации нескольких строк с помощью grep:

Поместите это в filename.txt:

abc
def
ghi
jkl

команда grep с использованием опции -E с каналом между токенами в строке:

grep -Ev 'def|jkl' filename.txt

печатает:

abc
ghi

Команда с использованием опции -v с каналом между токенами, окруженными parens:

egrep -v '(def|jkl)' filename.txt

печатает:

abc
ghi
  • 10
    Я удивлен, что никто не говорил о методе grep -v -e def -e jkl который ИМХО более понятен…
  • 3
    Или даже лучше: grep -Fv -e def -e jkl который еще быстрее!
Показать ещё 2 комментария
23

Другой вариант - создать список исключений, особенно полезен, когда у вас есть длинный список исключений.

vi /root/scripts/exclude_list.txt

Теперь добавьте то, что вы хотели бы исключить

Nopaging the limit is
keyword to remove is

Теперь используйте grep для удаления строк из файла журнала файлов и просмотра информации, не исключенной.

grep -v -f /root/scripts/exclude_list.txt /var/log/admin.log
  • 0
    Хороший совет! Спасибо
  • 1
    Я не знал, что вы можете использовать -v с -f (или что последний вообще существует).
Показать ещё 2 комментария
17
egrep -v "Nopaging the limit is|keyword to remove is"
12
grep -Fv -e 'Nopaging the limit is' -e 'keyword to remove is'

-F соответствует литеральными строками (вместо регулярного выражения)

-v инвертирует совпадение

-e позволяет использовать несколько шаблонов поиска (все литеральные и инвертированные)

  • 0
    Это правильный ответ: единственный, который избегает как множественных экземпляров grep -v и искусственного требования регулярного выражения (позволяет четко указывать несколько строк в отдельных аргументах). Только представьте, что вы создаете это регулярное выражение программно в скрипте для строк, которые могут содержать что угодно ...
9

Вы можете использовать обычный grep следующим образом:

tail -f admin.log | grep -v "Nopaging the limit is\|keyword to remove is"

  • 1
    Этот ответ работал для меня на MacOSX. Побег из трубы является ключевым
8
tail -f admin.log|grep -v -E '(Nopaging the limit is|keyword to remove is)'
4

Глыбы могут быть скованы цепью. Например:

tail -f admin.log | grep -v "Nopaging the limit is" | grep -v "keyword to remove is"
  • 0
    Уловка здесь в том, что вместо процесса, который будет фильтровать, вам придется последовательно запускать N процессов, где каждый из них что-то отфильтровывает. Это может значительно замедлить ход событий.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню