Как сделать 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 и т. Д.

  • Как в режиме реального времени выводить вывод, содержащий индикатор выполнения?
  • Перенаправить stderr из уже запущенного скрипта
  • Могу ли я настроить оболочку для печати STDERR и STDOUT в разных цветах?
  • Как использовать stdin с тройником или другими типами труб или перенаправление выходов?
  • Сценарий оболочки не отображает последнюю строку stdout на экране без ввода пользователем
  • Добавить вывод в файл и перенаправить stderr в null
  • Отображать вывод на консоль, пока используется grep
  • перенаправить вывод оболочки в файл, даже когда я убиваю программу
  • 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 будет фильтровать для вас.

    Interesting Posts

    Исключить окна без статического идентификатора от Compton

    Как добавить запись в / etc / fstab для общей папки Windows?

    Только выводить ошибки / предупреждения при компиляции ядра?

    Sox останавливается после определенного количества байтов

    Список всех процессов без управления терминалом (только)?

    Переместить содержимое папки на один уровень

    Как я могу получить статистику о процессорах, похожих на процессор, из командной оболочки?

    Как установить ярлык в контейнере dm-crypt + LUKS?

    LFSH … для чего / lib / init?

    Какие дополнительные привилегии у пользователя root есть у стандартного пользователя?

    Как я получил git-коммиты, чтобы появиться в автозаполнении?

    Как добавить каждый элемент в список с помощью цикла?

    Как исправить глобальные ярлыки, когда они перестают работать в KDE?

    Использовать start-stop-daemon для сервера PHP

    Замедление вертикальной прокрутки тачпада (слишком чувствительная)

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