Как сделать grep в реальном журнале (stdout)?

Я не уверен, что это такое, но это то, что я думаю.

То, что я хочу сделать, это отфильтровать определенное сообщение журнала при запуске исполняемого файла.

Я попробовал это:

Executable 2>&1 /dev/null | grep -v "fixme:quartz:Parser_OutputPin_QueryInterface No interface for {56a868a5-0ad4-11ce-b03a-0020af0ba770}!" 

И нормальный:

 Executable | grep -v "fixme:quartz:Parser_OutputPin_QueryInterface No interface for {56a868a5-0ad4-11ce-b03a-0020af0ba770}!" 

Но Терминал по-прежнему был заполнен тысячами сообщений fixme:quartz и т. Д.

  • журнал регистрации ufsdump при резервном копировании на stdout
  • vim: Синтаксис синтаксиса с помощью аргумента командной строки
  • Есть ли команда типа «tee», которая ограничивает размер файла и обрабатывает выходной файл как очередь с фиксированным размером?
  • uniq и bash для цикла, не записывающего в stdout перед закрытием stdin (для системы уведомлений посетителей в одной строке)
  • Динамический ~ / .ssh / config
  • Убейте процесс, если он успокоится в течение определенного времени
  • Может ли написать stdout место противодавления в процессе?
  • Как дублировать STDOUT?
  • One Solution collect form web for “Как сделать grep в реальном журнале (stdout)?”

    Во-первых, вам нужно выяснить, отправляются ли сообщения, отправляемые в stdout или stderr. В первом примере у вас есть stderr, получивший перенаправление на stdout – это часть «2> и 1». У вас также есть «/ dev / null» в командной строке, что совершенно не имеет смысла. Почему «/ dev / null» появляется в командной строке?

    Во-вторых, вам нужно решить, какие сообщения вы хотите видеть. Флаг «-v» для grep собирается инвертировать совпадение – только строки, которые не соответствуют вашей строке шаблона, будут распечатаны. Шаблон, который вы указываете, довольно точен: вам может понадобиться попробовать менее конкретный шаблон, например 'fixme:quartz' , который в силу своей более короткой длины заставит grep -v не соответствовать больше строк.

    Если бы я был вами, я бы сделал что-то вроде этого:

     Executable > log 2> err 

    Это разделяет stdout и stderr на два разных файла. Если бы я хотел найти строку «fixme: quartz», я бы сделал:

     grep 'fixme:quartz' log grep 'fixme:quartz' err 

    чтобы решить, какой файл посмотреть, а затем использовать текстовый редактор, который поддерживает регулярные выражения (например, vim ), чтобы найти то, что я хотел.

    Если это не сработает, или если Executable должен длиться долгое время, и вы просто хотите увидеть определенные сообщения, выполните описанную выше процедуру и определите свое регулярное выражение с помощью vim и vim , vim ли сообщение в стандартный вывод или STDERR. Тогда вы можете сделать это:

     Executable > log 2> err tail -f log | grep 'fixme:quartz' # or whatever regular expression 

    Когда Executable запускает и создает сообщения, tail -f будет периодически читать их из файла «log» и печатать на свой собственный stdout, где grep будет фильтровать для вас.

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