Привет всем.
Я собираю трапы с кое-каких железок. Мне приходят трапы но их форматирование не приносит хороших результатов так как отображается очень много излишней информации. Используется демон snmptrapd c параметрами -Lo -t -f -F "Trap.%v from %B\n"
Насколько я понял из манов параметр %v дает список переменных пересылаемых в сообщении, а параметр %B - имя или адрес компьютера отославшего трап. Список переменных получается довольно большим из этого всего мне необходимо выбрать только те которые находятся в кавычках.
Т.е. я получаю строки вида
2008-09-03 15:36:14 TRAP.SNMPv2-SMI::enterprises.12394.1.2.6.4.0 2165617 SNMPv2-SMI::enterprises.12394.1.2.6.6.0 "NPU.Slot#5" SNMPv2-SMI::enterprises.12394.1.2.6.5.0 2 SNMPv2-SMI::enterprises.12394.1.2.6.8.0 2 SNMPv2-SMI::enterprises.12394.1.2.100.3.1.1.1.0 526 SNMPv2-SMI::enterprises.12394.1.2.100.7.1.1.1.0 353 SNMPv2-SMI::enterprises.12394.1.2.100.3.1.1.3.0 "evidens3_BS487_BE256" SNMPv2-SMI::enterprises.12394.1.2.100.7.1.1.2.0 "1505" from 192.168.50.141
2008-09-03 15:36:14 TRAP.SNMPv2-SMI::enterprises.12394.1.2.6.4.0 2165618 SNMPv2-SMI::enterprises.12394.1.2.6.6.0 "SU.00-10-e7-62-af-1c" SNMPv2-SMI::enterprises.12394.1.2.6.5.0 5 SNMPv2-SMI::enterprises.12394.1.2.6.8.0 1 SNMPv2-SMI::enterprises.12394.1.2.6.7.0 131 from 192.168.50.141
Из всего этого "добра" мне необходимо только то что находится в кавычках. Т.е. хотелось бы привести строки в такой вид.
2008-09-03 15:36:14 TRAP.NPU.Slot#5 evidens3_BS487_BE256 1505 from 192.168.50.141
2008-09-03 15:36:14 TRAP. SU.00-10-e7-62-af-1c from 192.168.50.141
Понимаю что стандартными методами правки конфига snmptrapd или изменением параметров после флага -F этого не добиться, поэтому есть идея использовать че-то типа awk-sed. Только пока что у меня это совсем не получается.. помогите плз..
P.S. Прощу прощения за столь длинную предысторию, но возможно есть и другие решения помимо того пути который выбрал я.
Заранее спасибо ответившим.
фильтрация текста :( (надеюсь кто-нибудь поможет)
Модератор: Модераторы разделов
-
csx
- Сообщения: 302
- Статус: Сыч Домовый
- ОС: Что сломалось, то и чиним...
Re: фильтрация текста :(
Забыл сейчас как принимать в перле данные из стандартного ввода... Поэтому написал пример где принимает данные из файла указанного как первый параметр.
Сорри за страшные регэкспы, можно, в принципе, сделать проще.
Сорри за страшные регэкспы, можно, в принципе, сделать проще.
Код: Выделить всё
$txt = $ARGV[0];
if ($txt) {} else {die "no 1st arg in command line";};
open F, $txt;
while (<F>) {
$line = $_;
$line =~ /(\d{4}(-\d{2}){2}\s(\d{2}:){2}\d{2})\s/smi;
$date = $1;
$line =~ /(\sfrom\s(\d{1,3}\.){3}\d{1,3})/smi;
$from = $1;
print $date;
$quotes = $line;
while ($quotes =~ /\s\"(.*?)\"\s/smig) {
print " ".$1;
};
print $from."\n";
};
close F;-- Как называется болезнь когда всё время по телефону разговариваешь?
-- Техподдержка...
-- Техподдержка...
-
allez
- Сообщения: 2223
- Статус: Не очень злой админ :-)
- ОС: SuSE, CentOS, FreeBSD, Windows
Re: фильтрация текста :(
Способ быстрый и грязный, но вроде работает :-)
allez@home:~/tmp> cat file
2008-09-03 15:36:14 TRAP.SNMPv2-SMI::enterprises.12394.1.2.6.4.0 2165617 SNMPv2-SMI::enterprises.
12394.1.2.6.6.0 "NPU.Slot#5" SNMPv2-SMI::enterprises.12394.1.2.6.5.0 2 SNMPv2-SMI::enterprises.
12394.1.2.6.8.0 2 SNMPv2-SMI::enterprises.12394.1.2.100.3.1.1.1.0 526 SNMPv2-SMI::enterprises.
12394.1.2.100.7.1.1.1.0 353 SNMPv2-SMI::enterprises.12394.1.2.100.3.1.1.3.0 "evidens3_BS487_BE256"
SNMPv2-SMI::enterprises.12394.1.2.100.7.1.1.2.0 "1505" from 192.168.50.141
2008-09-03 15:36:14 TRAP.SNMPv2-SMI::enterprises.12394.1.2.6.4.0 2165618 SNMPv2-SMI::enterprises.
12394.1.2.6.6.0 "SU.00-10-e7-62-af-1c" SNMPv2-SMI::enterprises.12394.1.2.6.5.0 5 SNMPv2-SMI::enterprises.
12394.1.2.6.8.0 1 SNMPv2-SMI::enterprises.12394.1.2.6.7.0 131 from 192.168.50.141
allez@home:~/tmp> cat file | while read LINE; do BEGINNING=$(echo $LINE | grep -o ".*TRAP."); MIDDLE=
$(echo $LINE | grep -o "\"[^\"]*\"" | sed 's/"//g' | tr "\n" " "); ENDING=$(echo $LINE | grep -o "from.*");
echo "${BEGINNING}${MIDDLE}${ENDING}"; done
2008-09-03 15:36:14 TRAP.NPU.Slot#5 evidens3_BS487_BE256 1505 from 192.168.50.141
2008-09-03 15:36:14 TRAP.SU.00-10-e7-62-af-1c from 192.168.50.141
-
csx
- Сообщения: 302
- Статус: Сыч Домовый
- ОС: Что сломалось, то и чиним...
Re: фильтрация текста :(
2allez
Если в середине строчки встретится from то будет плохо
Если в середине строчки встретится from то будет плохо
-- Как называется болезнь когда всё время по телефону разговариваешь?
-- Техподдержка...
-- Техподдержка...
-
allez
- Сообщения: 2223
- Статус: Не очень злой админ :-)
- ОС: SuSE, CentOS, FreeBSD, Windows
Re: фильтрация текста :(
Если встретится, то таки да, будет.
-
knicefire
- Сообщения: 86
- ОС: Arch Linux
Re: фильтрация текста :(
Спасибо огромное!
from не попадется в средине строки т.к. это слово формируется в результате работы сортировки snmptrapd
это слово будет в конце и после него будет следовать айпи с которого отправлен трап
спасибо большое.. файл это конечно хорошо.. но snmptrapd у меня работает выводя трапы на стандартный поток вывода.. и надо этот поток отфильтровывать.. в любом случае спасибо за наводку.. попробую применить это к моей конкретной задаче!!!
СПАСИБО!!!!!!!!
-
allez
- Сообщения: 2223
- Статус: Не очень злой админ :-)
- ОС: SuSE, CentOS, FreeBSD, Windows
Re: фильтрация текста :(
Ну так у меня цикл while как раз и обрабатывает стандартный поток вывода команды cat. Замените cat на вашу команду и все у вас получится.
-
csx
- Сообщения: 302
- Статус: Сыч Домовый
- ОС: Что сломалось, то и чиним...
Re: фильтрация текста :(
Равно как мой скрипт можно переделать, там <STDIN> кажется надо подставить вместо файла.... Перл-гуру щас придут подскажут, если есть.
Но метод allez'а по производительности, скорее всего, будет лучше.
Но метод allez'а по производительности, скорее всего, будет лучше.
-- Как называется болезнь когда всё время по телефону разговариваешь?
-- Техподдержка...
-- Техподдержка...
-
Portnov
- Модератор
- Сообщения: 1786
- Статус: Матёрый линуксоид
- ОС: Debian testing/unstable
Re: фильтрация текста :(
csx, тупо while (<>).
Работа: Ubuntu 9.10
Дом: Debian testing/unstable и на всякий случай winxp в virtualbox.
Для разнообразия: моя домашняя страница -http://iportnov.ru
Дом: Debian testing/unstable и на всякий случай winxp в virtualbox.
Для разнообразия: моя домашняя страница -http://iportnov.ru