Раскраска логов посредством скрипта vbs и RegExp Для тех, кому не хочется читать, а сразу перейти к результату - вот ссылка на файлы. Данная статья расскажет о том, как использовать регулярные выражения (RegExp) для повышения наглядности логов, в частности, на примере BNComplex. Приводится ссылка на обучающие документы, приводятся примеры использования, составления выражений.
Периодически, мне по роду своей деятельности приходится просматривать логи различных программ (CyberFleet, BNComplex), дабы выяснить что же случилось в работе (в том числе искать сбои). Хорошо, когда искомые строки редки, и быстро находятся поиском среди нескольких тысяч записей данных. Но периодически, приходится читать и слабо структурированные данные, где выделение блоков не очевидно, а визуальный поиск данных бывает затруднен.
И давно уже руки чесались как-то визуально выделить часто искомую информацию среди обильного множества текста. Самым быстрым в плане реализации решением мне показалось добавить цветовые схемы раскраски данных/блоков.
Ну например, что бы было примерно вот так (да-да, это как раз конечный результат):
Используя опыт работы с регулярными выражениями нашел, что кроме поиска текста, они так же позволяют и его заменять.
Для опробования методики родился маленький скрипт на vbs (v.01), который позволял применять к журнала работы TCP Gate службы последовательно несколько выражений. Результат его работы как раз виден на рисунке сверху.
Его недостатками было то, что он содержал весь код замены внутри себя, что не очень подходило для быстрого добавления новых шаблонов, и ориентирование его на работу с несколькими типами файлов/логов.
Скрипт последовательно применяет регулярные выражения к строке, определяя на html оформление искомых блоков. Соответственно, для просмотра результатов требуется какой-то просмоторщик html фалов (хотя бы просто браузер).
Скрипт основан на методе RegExp.repace (), позволяющий производить замену блоков/group в выражении на другую.
Методика составления своих шаблонов регулярных выражений.2. Выберем закладку Replace 3. Заменим текст в окне на тот, который будет подвергаться анализу (он будет нами использоваться как пример).
4. В первой строке (где \be(\w*)s\b) будем описывать какие блоки/группы мы ищем в тексте 5. Во второй строке (где [[$&$&]]) на что именно следует менять текст
Задача-пример №1 - выделить синим цветом блок информации о координатах Решение: Разобьем наши строки на три группы/блока: 2. Сами координаты 3. Все что после координат все что до и после, можно сразу обозначить как (.*)а вот сами координаты нужно будет найти. Благо для их поиска достаточно найти два идущих подряд символа "|" вот с этого и начнем. Так как символ "|" используется для обозначения в самих выражениях RegExp, то перед ним нужно установить \, т.е. пишем в строке поиска "\|" два раза в строке: "\|\|"
сразу видим, что подсвечены соответствующие символы. Теперь нужно разобраться с числами дальше. Для обозначения числа воспользуемся сокращением "\d". Так как количеств цифр целой части может быть от одной до 3-ех, то "\d{1,3}" в строке: "\|\|\d{1,3}"
далее идет точка - разделитель дробной части, так как точка используется как сокращение в RegExp, то перед ней ставим \ в строке:"\|\|\d{1,3}\."
далее идет 6 цифр. это "\d{6}" в строке: "\|\|\d{1,3}\.\d{6}"
т.е. строка "d{1,3}\.\d{6}" найдет нам цифры, разделенные запятой, перед ней от 1-ой до 3-ех, а после ровно 6. далее нам уже знакомый символ "|", а потом опять блок координат. Можно скопировать нужную последовательность с начала строки - мы ее уже описали в строке "\|\|\d{1,3}\.\d{6}\|\d{1,3}\.\d{6}"
почти все. Нужно проверить, что координаты могут быть и отрицательные. - в одну из строк в образце добавте минусы перед числами, например вот так ||53.249980|-40.249468| ||-53.249753|40.249222|
ага. Наши строки, где есть минус перед координатами не выделились - надо менять шаблон для этого, перед "\d{1,3}" добавим "\-?" - т.е. перед должен идти "минус" (но может и не идти - в данном случае ? означет {0,1} т.е. от нуля до одного указанного символа). Операцию нужно провести два раза (две же координаты) в строке "\|\|\-?\d{1,3}\.\d{6}\|\-?\d{1,3}\.\d{6}"
надо это все оформить как группу - для этого просто заключим в кавычки в строке "(\|\|\-?\d{1,3}\.\d{6}\|\-?\d{1,3}\.\d{6})"
надо еще добавить группы "все что слева, все что справа", для этого слева и справа добавляем (.*) в строке "(.*)(\|\|\-?\d{1,3}\.\d{6}\|\-?\d{1,3}\.\d{6})(.*)"
видим внизу, что групп стало три. теперь. когда мы обозначили наши группы, можно их выделять. Будем со 2-ой строкой - чем меняемДля начала просто напишем там все наши три группы В строке замены "$1$2$3"
В окне результата пока пишите будет и выведена начальная строка, ибо она и состоит полностью из этих трех групп. Для цветового выделения воспользуемся html тегом <font>, заключив в него группу/блок 2 В строке замены "$1<font color=green>$2</font>$3"
 Ну вот и все. Если полученный новый файл сохраним как HTML, то при его открытии будем видеть выделенный блок координат. Как вы уже поняли, блоки можно поменять местами, или даже забыть некоторые из них В строке замены "$3$2$1"
Остается только две полученных строки - строка шаблона, и строка замены сохранить в файл последовательно. Теперь данный файл с этим шаблоном можно использоваться для обработки текста.
Вообщем, попугайчик стал цветным :)
Источник: ГЛОНАСС Тамбов, BNComplex, vbs, RegExp, регулярные выражения, форматирование, html, CyberFleet |