строки журнала grep для конкретного запроса идентификатора

Итак, у меня есть следующий пример журнала:

2015-03-30 10:19:44,200 DEBUG [Default : 1] [Application:ABC BIW: IDA:6d87de8e-1276-4496-b49d-dd4cd375cbe4 Info:P23 Code:ABCD] A log message 1 2015-03-30 10:19:45,250 DEBUG [Default : 1] [Application:ABC BIW: IDA:6d87de8e-1276-4496-b49d-dd4cd375cbe4 Info:P23 Code:ABCD] A log message 2 2015-03-30 10:19:45,700 DEBUG [Default : 1] [Application:ABC BIW: IDA:6d87de8e-1276-4496-b49d-dd4cd375cbe4 Info:P23 Code:ABCD] log message of exception occurred in abc.cdef.class.sdk.SampleException: Message exception.. <stacktrace lines goes here> 2015-03-30 10:19:46,100 DEBUG [Default : 1] [Application:ABC BIW: IDA:6d87de8e-1276-4496-b49d-dd4cd375cbe4 Info:P23 Code:ABCD] A log message 3 2015-03-30 10:19:46,120 DEBUG [Default : 1] [Application:ABC BIW: IDA:6d87de8e-1276-4496-b49d-dd4cd375cbe4 Info:P23 Code:ABCD] A log message 4 2015-03-30 10:19:46,120 DEBUG [Default : 1] [Application:ABC BIW: IDA:6d800e80-5276-4006-a44d-dd4cea7bcbe1 Info:P13 Code:AB4D] A log message 6 

Каждый запрос, который приходит на сервере как уникальный IDA. Я хочу, чтобы grep все строки журнала, которые имеют определенный IDA и помещают в другой файл журнала со всеми найденными вхождениями. Я использую grep, потому что он также добавляет номер файла и строки (grep -n), где были найдены эти шаблоны (serach идет по 2 файлам 3 файла). Но тем не менее, я также хочу, чтобы исключения stacktrace были включены, чего не происходит, потому что у этих строк нет IDA, который я ищу.

Кроме того, исключение stacktrace может также происходить как часть последней записи для конкретного IDA, например:

 2015-03-30 10:19:44,200 DEBUG [Default : 1] [Application:ABC BIW: IDA:6d87de8e-1276-4496-b49d-dd4cd375cbe4 Info:P23 Code:ABCD] A log message 1 2015-03-30 10:19:45,200 DEBUG [Default : 1] [Application:ABC BIW: IDA:6d87de8e-1276-4496-b49d-dd4cd375cbe4 Info:P23 Code:BECD] A log message 2 2015-03-30 10:19:44,200 DEBUG [Default : 1] [Application:ABC BIW: IDA:6d87de8e-1276-4496-b49d-dd4cd375cbe4 Info:P23 Code:DFCD] A log message 3 2015-03-30 10:19:45,200 DEBUG [Default : 1] [Application:ABC BIW: IDA:6d87de8e-1276-4496-b49d-dd4cd375cbe4 Info:P23 Code:BBCD] A log message 4 2015-03-30 10:19:45,200 DEBUG [Default : 1] [Application:ABC BIW: IDA:6d87de8e-1276-4496-b49d-dd4cd375cbe4 Info:P23 Code:ABCC] log message of exception occurred in abc.cdef.class.sdk.SampleException: Message exception.. <stacktrace lines goes here> 2015-03-30 10:19:45,200 DEBUG [Default : 1] [Application:ABC BIW: IDA:ed8ede83-1116-4697-a69d-ee6cd575cbe7 Info:P23 Code:ABDD] A log message 5 

Любые предложения для этого?

PS1- Я искал, но я нашел поиск между тегами, что в моем случае недостаточно.

PS2-Мое решение os в настоящее время только один liner grep, но я открыт для других решений, таких как perl, awk, sed, python или любой другой «способ командной строки bash».

3 Solutions collect form web for “строки журнала grep для конкретного запроса идентификатора”

Решение Perl:

 perl -ne '$id = "6d87de8e-1276-4496-b49d-dd4cd375cbe4"; print if $match = (/IDA:$id/ .. /IDA:(?!$id)/) and $match !~ /E0$/ ' *.log 

Объяснение:

  • /regex1/ .. /regex2/ возвращает true для строк между совпадениями.
  • IDA:(?!$id) meand IDA: не следует $ id.
  • последняя строка в диапазоне обозначается суффиксом E0 который проверяет условие, поэтому последняя строка (другая с IDA) не печатается.

Чтобы включить имена файлов и номера строк, используйте

 print "$ARGV:$.:$_" 

и добавьте следующее перед заключительной цитатой:

 ; $. = 0 if eof 

Это печатает соответствующие данные (каждый из которых предшествует номер строки) в файлах, названных как IDA:

 awk 'match($0,/IDA:[^ ]+/) { print NR, $0 > substr($0,RSTART+4,RLENGTH-4) }' logfile 

Sed раствор:

 sed -n ':2;/IDA:6d87de8/{p;/exception/{:1;n;/IDA:/!{p;b1};b2}}' 

Сценарий завершает вывод ( -n option), пока не встретится соответствующий IDA ( /IDA:6d87de8/ ), который будет напечатан ( p ). Затем шаблон (строка) будет проверяться на наличие «exeption» и, если это так, начинает работать со следующей строкой ( n ). Если следующая строка не состоит из IDA: строка будет напечатана, а сценарий перейдет к следующей строке (цикл начинается с :1 балл). Если строка cosist IDA: сценарий начинается с начала (цикл в точке :2 точки)

Если вы хотите перечислить строки – вывод строк по nl или grep -n ".*" И передать его в sed скрипт.

  • Как обмануть скрипт init в ответ 0
  • Как я могу grep для строки, содержащей метасимволы регулярных выражений, такие как $ и?
  • Идентификация генов из списка генов
  • Sed из строки 6 из всех txt-файлов и возможность выводить все результаты в одном файле
  • отобразить отсутствующий счетчик icmp_seq | команда ping
  • bash regex: звездочка дает неоднозначные результаты поиска с помощью grep
  • Исключить параметр в команде du
  • Строки, не выводящие текст, найденный с помощью grep
  • Отображение строк за последние 10 минут с определенным рисунком в журналах
  • Bash-completion и grep
  • Как активно grep log за последние 15 секунд для фразы?
  • Linux и Unix - лучшая ОС в мире.