LINUX.ORG.RU

Bash scripting for dummy...


0

1

Всем доброго времени суток. У меня «небольшая» проблемка... На работе надо проанализировать энное количество почтовых логов, и надо это сделать быстро... Умные люди посоветовали заюзать баш скрипт, но увы я не могу найти как его написать... Помогите плиз (и плиз сильно не пинать, я тут новенький :) ).... В общем из этого:

[root@test666 ~]# grep "657167B0024B" /var/log/test/mx.log
13:00:03 (2014-11-30) mx.server.eu [mail.info] postfix/smtpd[21149]: 657167B0024B: client=unknown[::1]
13:00:03 (2014-11-30) mx.server.eu [mail.info] postfix/cleanup[21528]: 657167B0024B: warning: header Subject: Krediit from unknown[::1]; from=<test@mail.com> to=<receiver@mail.ru> proto=ESMTP helo=<data.server.eu>
13:00:03 (2014-11-30) mx.server.eu [mail.info] postfix/cleanup[21528]: 657167B0024B: message-id=<fsdkfjsdf.fgsjkldfhgklfhsg@kfjdshf.fdf.er>
13:00:03 (2014-11-30) mx.server.eu [mail.info] postfix/qmgr[19278]: 657167B0024B: from=<test@mail.com>, size=571, nrcpt=1 (queue active)
13:00:03 (2014-11-30) mx.server.eu [mail.info] postfix/qmgr[19278]: 657167B0024B: removed
13:00:03 (2014-11-30) mx.server.eu [mail.info] postfix/smtp[21452]: 657167B0024B: to=<receiver@e.mail.ru>, orig_to=<receiver@mail.ru>, relay=antivirus.server.eu[127.0.0.1]:25, delay=0.12, delays=0.01/0/0/0.1, dsn=2.6.0, status=sent (250 2.6.0 Ok, id=34593-01, from MTA: 250 2.0.0 Ok: queued as 7780B3402030)
[root@test666 ~]#

Надо получить это:

13:00:03 (2014-11-30) received by mx.server.eu id:657167B0024B status:sent from:test@mail.com to:receiver@mail.ru
13:00:03 (2014-11-30) passed to antivirus.server.eu id:7780B3402030 status:sent
Может кто-то может навести на верную мысль? ссылку? А то уже задолбался гуглить... Заранее спасибо! :)


#!/bin/bash

echo '
13:00:03 (2014-11-30) mx.server.eu [mail.info] postfix/smtpd[21149]: 657167B0024B: client=unknown[::1]
13:00:03 (2014-11-30) mx.server.eu [mail.info] postfix/cleanup[21528]: 657167B0024B: warning: header Subject: Krediit from unknown[::1]; from=<test@mail.com> to=<receiver@mail.ru> proto=ESMTP helo=<data.server.eu>
13:00:03 (2014-11-30) mx.server.eu [mail.info] postfix/cleanup[21528]: 657167B0024B: message-id=<fsdkfjsdf.fgsjkldfhgklfhsg@kfjdshf.fdf.er>
13:00:03 (2014-11-30) mx.server.eu [mail.info] postfix/qmgr[19278]: 657167B0024B: from=<test@mail.com>, size=571, nrcpt=1 (queue active)
13:00:03 (2014-11-30) mx.server.eu [mail.info] postfix/qmgr[19278]: 657167B0024B: removed
13:00:03 (2014-11-30) mx.server.eu [mail.info] postfix/smtp[21452]: 657167B0024B: to=<receiver@e.mail.ru>, orig_to=<receiver@mail.ru>, relay=antivirus.server.eu[127.0.0.1]:25, delay=0.12, delays=0.01/0/0/0.1, dsn=2.6.0, status=sent (250 2.6.0 Ok, id=34593-01, from MTA: 2
' | sed -n '
s/^\([0-9:]* ([0-9\-]*)\) \([^ ]*\) [^:]*: \([A-Z0-9]*\): warning: header Subject: .* from=<\([^>]*\)> to=<\([^>]*\)> .*/\1 received by \2 id:\3 status:sent from:\4 to:\5/p
s/^\([0-9:]* ([0-9\-]*)\) [^ ]* [^:]*: [A-Z0-9]*: to=<.*>, orig_to=<.*>, relay=\(.*\)\[[0-9\.]*\][^,]*, .* status=\([^ ]*\).* queued as \([A-Z0-9]*\))/\1 passed to \2 id:\4 status:\3/p
'
anonymous
()
Ответ на: комментарий от anonymous

Я понимаю, что это в теории просто, просто я больше по железу, нежели по программированию... :)

leonzi
() автор топика
Ответ на: комментарий от anonymous

Благодарю. Первая часть проблемы решена... Дальше как видно письмо ушло на «антивирус сервер».

Эта комбинация к сожалению там ничего не вывела...

| sed -n '
s/^\([0-9:]* ([0-9\-]*)\) \([^ ]*\) [^:]*: \([A-Z0-9]*\): warning: header Subject: .* from=<\([^>]*\)> to=<\([^>]*\)> .*/\1 received by \2 id:\3 status:sent from:\4 to:\5/p
s/^\([0-9:]* ([0-9\-]*)\) [^ ]* [^:]*: [A-Z0-9]*: to=<.*>, orig_to=<.*>, relay=\(.*\)\[[0-9\.]*\][^,]*, .* status=\([^ ]*\).* queued as \([A-Z0-9]*\))/\1 passed to \2 id:\4 status:\3/p
'

Вот это в логах антивируса по «7780B3402030»

13:00:34 (2014-11-30) antivirus.server.eu [mail.info] postfix/smtpd[34987]: 7780B3402030: client=localhost[127.0.0.1]
13:00:34 (2014-11-30) antivirus.server.eu [mail.info] postfix/cleanup[35133]: 7780B3402030: message-id=<fsdgsdfgdfgdfgdf@sdgdfg.sdgfdgs.bf>
13:00:34 (2014-11-30) antivirus.server.eu [mail.info] postfix/qmgr[14478]: 7780B3402030: from=<test@mail.com>, size=92395, nrcpt=1 (queue active)
13:00:34 (2014-11-30) antivirus.server.eu [mail.info] postfix/smtp[33821]: 7780B3402030: to=<receiver@e.mail.ru>, relay=spamfilter.server.eu[127.0.0.1]:25, delay=0.05, delays=0.05/0/0/0, dsn=2.0.0
, status=sent (250 2.0.0 Ok: queued as 489962BF804)
13:00:34 (2014-11-30) antivirus.server.eu [mail.info] postfix/qmgr[14478]: 7780B3402030: removed

leonzi
() автор топика
Ответ на: комментарий от anonymous

Если честно, то я даже не знаю, в какую сторону копать... :(

Пробовал удалять «to=<.*>, orig_to=<.*>,» вместе и по отдельности - не помогает... :(

leonzi
() автор топика
Ответ на: комментарий от leonzi

Начинай с самого начала:

' | sed '
s/^[0-9:]*/замена/
'
По мере написания регулярного выражения, описывающего нужную строку и её элементы ([0-9:]*), из результата работы скрипта будет убираться разобранные элементы. Когда строка полностью исчезнет, можно будет написать «замену», на которую исходная строка должна быть заменена. Для этого в регулярном выражении отметить нужные тебе элементы скобками: \( и \). В замене отмеченные скобками элементы описываются как \n, где n - порядковый номер элемента из регулярного выражения.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.