РЕДАКТИРОВАТЬ: Как указали dmourati и Caleb , вы могли бы также использовать egrepвместо grep -Eдля удобства. В некоторых системах это будет ссылка на тот же двоичный файл, в других - его копия, предоставляемая пакетом grep. В любом случае это альтернатива -Eкоммутатору. Однако, согласно странице руководства GNU grep:
[…] Две версии программы egrepи fgrepдоступны. egrepтак же, как grep -E. fgrepтак же, как grep -F. Прямой вызов как egrepили fgrepустарел, но предоставляется, чтобы позволить историческим приложениям, которые полагаются на них, работать без изменений.
Поскольку они являются синонимичными командами, все сводится к предпочтениям, если у вас вообще нет egrep. Однако для прямой совместимости рекомендуется использовать grep -Eсинтаксис, поскольку другой метод официально не рекомендуется.
Использование grep -Eвместо egrepгарантии повторного ответа?
Калеб
@ Калеб Я не понимаю, почему нет. Существует несколько способов
убрать
1
Да, но это просто символические ссылки друг на друга, а не две разные программы с некоторым функциональным перекрытием. Так не будет ли это больше «приложением» (читай: комментарий), а не полноценным ответом? У меня были отрицательные голоса за мелкие нарушения ...
Марчин
@DTest: По праву dmourati фактически избил меня до удара за пару секунд, и хотя он не объяснил причину, он заслуживает некоторого уважения здесь. Вы явно опоздали на вечеринку, поскольку у нас обоих было по крайней мере два возражения, прежде чем вы пришли. Изменение синтаксиса двоичного файла с символьными ссылками на аргумент обычно является чем-то, для чего вы бы использовали комментарий, а не отдельный ответ. Если вы хотите , чтобы кожа кошки по- разному использовать sed, awk, perl, multitailили ninja_foo.
Калеб
1
@DTest: Я позволил себе внести существенные правдоподобные изменения в ваш ответ, чтобы добавить некоторые оригинальные источники. Похоже, -E рекомендуется для использования в будущем, поэтому я отметил это, но удалил ваше примечание о дистрибутивах, у которых нет egrep. В упомянутом дистрибутиве есть egrep, это просто отдельный двоичный файл вместо символической ссылки.
Калеб
21
Попробуйте передать его в egrep со списком слов, разделенных конвейером, которые вы хотите отфильтровать:
tail -f log_file | egrep -v 'ELB|Pingdom|Health'
Обратите внимание, что использование круглых скобок в списке совпадений не является обязательным. Поскольку |grep обрабатывается как логический оператор OR независимо от того, происходит ли он как часть подгруппы или нет. '(ELB|Pingdom|Health)'будет функционировать точно так же. Для некоторых синтаксис может быть более очевидным; Мне легче набирать текст, так как я могу переключаться с одного совпадения на список возможных совпадений, не возвращаясь к скобкам.
Для дополнительной информации стоит упомянуть, что это multitailделает ninja foo, когда дело доходит до фильтрации выходных данных. Например, вы можете отфильтровать слова так:
multitail -e ELB -e Pingdom -e Health -f log_file
Вы также можете использовать его, чтобы раскрасить или иначе выделить результат, вместо того, чтобы просто фильтровать его.
РЕДАКТИРОВАТЬ: См. Ответ DTests и комментарии для полного объяснения того, как egrep является устаревшим альтернативным способом запускаgrep -E .
не должно ли выражение заканчиваться на ('), а не на (")?
bbaja42
Да, спасибо, что это была опечатка. Для дальнейшего использования, так как сайты обмена стеками функционируют как вики, вот такую вещь вы можете просто исправить.
Калеб
Я думал, что редактирование должно быть более 6 символов?
Sirex
Если у вас нет высокого повторения, да, минимум 6 символов, но в этом случае 1 символ очень важен. Вы можете принудительно внести изменения, добавив HTML-комментарий к телу. Персонажи будут учитываться в пределе, и вы можете заметить, почему вы делаете изменения.
Калеб
@Caleb большое спасибо за предложение о множественном хвосте, это потрясающе !! Не могу поверить, что я так долго в жизни жил без этого.
Вы хотите условно выполнять разные сценарии в зависимости от разных ключевых слов или шаблонов в файлах журнала?
Если вы хотите, чтобы поведение сценариев зависело от содержимого файлов журнала, вы можете выполнить фильтрацию с помощью Expect. ( http://en.wikipedia.org/wiki/Expect ) Expect является расширением Tcl, но существует также версия Expect для Python.
Expect предоставляет вам это мощное гибкое предложение типа switch, которое позволяет вам задавать различные варианты поведения в зависимости от состояний или шаблонов, присутствующих в вашем входном потоке. Например:
Таким образом, вы задаете шаблоны в операторе ожидаемого, и вы задаете различные поведения, и вы можете заключить все это в цикл, и вы можете легко написать очень мощные фильтры, которые также записывают части вашего ввода в разные файлы, или вообще отбрасывать его, или выполняйте действия и запускайте другие сценарии в зависимости от того, что вы вводите.
Итак, все сводится к тому, почему вы пытаетесь отфильтровать файлы журнала, принять меры по вводу журнала или просто по архивным причинам?
Ответы:
Я не знаю об использовании awk вместо grep, но это работает для меня:
РЕДАКТИРОВАТЬ: Как указали dmourati и Caleb , вы могли бы также использовать
egrep
вместоgrep -E
для удобства. В некоторых системах это будет ссылка на тот же двоичный файл, в других - его копия, предоставляемая пакетом grep. В любом случае это альтернатива-E
коммутатору. Однако, согласно странице руководства GNU grep:Поскольку они являются синонимичными командами, все сводится к предпочтениям, если у вас вообще нет egrep. Однако для прямой совместимости рекомендуется использовать
grep -E
синтаксис, поскольку другой метод официально не рекомендуется.источник
grep -E
вместоegrep
гарантии повторного ответа?sed
,awk
,perl
,multitail
илиninja_foo
.Попробуйте передать его в egrep со списком слов, разделенных конвейером, которые вы хотите отфильтровать:
Обратите внимание, что использование круглых скобок в списке совпадений не является обязательным. Поскольку
|
grep обрабатывается как логический оператор OR независимо от того, происходит ли он как часть подгруппы или нет.'(ELB|Pingdom|Health)'
будет функционировать точно так же. Для некоторых синтаксис может быть более очевидным; Мне легче набирать текст, так как я могу переключаться с одного совпадения на список возможных совпадений, не возвращаясь к скобкам.Для дополнительной информации стоит упомянуть, что это
multitail
делает ninja foo, когда дело доходит до фильтрации выходных данных. Например, вы можете отфильтровать слова так:Вы также можете использовать его, чтобы раскрасить или иначе выделить результат, вместо того, чтобы просто фильтровать его.
РЕДАКТИРОВАТЬ: См. Ответ DTests и комментарии для полного объяснения того, как egrep является устаревшим альтернативным способом запуска
grep -E
.источник
источник
Почему вы хотите записать эту информацию?
Если вы хотите, чтобы поведение сценариев зависело от содержимого файлов журнала, вы можете выполнить фильтрацию с помощью Expect. ( http://en.wikipedia.org/wiki/Expect ) Expect является расширением Tcl, но существует также версия Expect для Python.
Expect предоставляет вам это мощное гибкое предложение типа switch, которое позволяет вам задавать различные варианты поведения в зависимости от состояний или шаблонов, присутствующих в вашем входном потоке. Например:
Таким образом, вы задаете шаблоны в операторе ожидаемого, и вы задаете различные поведения, и вы можете заключить все это в цикл, и вы можете легко написать очень мощные фильтры, которые также записывают части вашего ввода в разные файлы, или вообще отбрасывать его, или выполняйте действия и запускайте другие сценарии в зависимости от того, что вы вводите.
Итак, все сводится к тому, почему вы пытаетесь отфильтровать файлы журнала, принять меры по вводу журнала или просто по архивным причинам?
источник