2012-04-08 4 views
2

Мой телефонный адаптер VoIP формирует запись журнала при поступлении входящего вызова. Мне удалось переправить его в syslog моей локальной машины ubuntu, в файл с именем/var/log/linksys .журнал.monitor (follow) и grep a syslog file

Теперь я хотел бы использовать его как мгновенный идентификатор вызывающего абонента. Важная строка включает строку «INVITE sip», поэтому я пробовал:

tail /var/log/linksys.log -f | grep "INVITE sip" 

но это приносит целую линию. Меня интересует только часть имени и телефона вызывающего абонента, между строками «От:» и первым знаком @ после него.

Моя цель будет заключаться в том, чтобы иметь возможность следить за файлом с хвостом -f или аналогичным (тоже многозадачность), но только показывать имя и номер телефона, когда новая строка добавляется в журнал. (Журнал принимает другие строки тоже)

Вот пример строки:

Apr 8 01:06:10 INVITE sip: [email protected]:5060 SIP/2.0#015#012Via: SIP/2.0/UDP 111.111.11.111:5060;branch=z9hG4bK5f142476;rport#015#012From: "SMITHSON D" <sip:[email protected]>;tag=as410515ed#015#012To: <sip:[email protected]:5060>#015#012Contact: <sip:[email protected]>#015#012Call-ID: [email protected]#015#012CSeq: 102 INVITE#015#012User-Agent: VoIPMS/SERAST#015#012Max-Forwards: 70#015#012Remote-Party-ID: "SMITHSON D" <sip:[email protected]>;privacy=off;screen=no#015#012Date: Sun, 08 Apr 2012 05:06:10 GMT#015#012Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY, INFO#015#012Supported: replaces#015#012Content-Type: application/sdp#015#012Content-Length: 291#015#012#015#012v=0#015#012o=root 18702 18702 IN IP4 111.111.11.111#015#012s=session#015#012c=IN IP4 111.111.11.111#015#012t=0 0#015#012m=audio 33100 RTP/AVP 0 18 101#015#012a=rtpmap:0 PCMU/8000#015#012a=rtpmap:18 G729/8000#015#012a=fmtp:18 annexb=no#015#012a=rtpmap:101 telephone-event/8000#015#012a=fmtp:101 0-16#015#012a=silenceSupp:off - - - -#015#012a=ptime:20#015#012a=sendrecv#015 

Большое спасибо за любую помощь ...

+0

это 'tail -f filefilename' право? Удачи. – shellter

ответ

2

Попробуйте использовать awk.

Вот мой простак один вкладыш (используешь поглазеть третье расширение аргумента, чтобы соответствовать):

gawk -v FS=';' '{match($3, /From: (.*)@/, m); print m[1]}' 

Тем же сценарий с красивее печатью:

gawk -v FS=';' -v OFS='/' '{match($3, /From: "(.*)" <(.*)@/, m); print m[1], m[2]}' 

Просто выходной трубой Grep в этом простак сценарий:

gawk -v FS=';' -v OFS='/' '{match($3, /From: "(.*)" <(.*)@/, m); print m[1], m[2]}' | gawk -v FS=';' -v OFS='/' '{match($3, /From: "(.*)" <(.*)@/, m); print m[1], m[2]}' 
+0

почему-то хвост | grep | dawk не работает. Но вместо того, чтобы пытаться это исправить, я модифицировал syslog, поэтому захватываются только строки INVITE, поэтому tail | gawk дал мне результаты, которые мне нужны. Теперь я вижу, кто звонит на мой экран еще до того, как телефон начинает звонить. Спасибо! – Henry

1

Если это на Gnu/Linux, вы можете использовать inotifywait для отслеживать изменения в файле, а затем запускать скрипт, который извлекает часть интересующей вас строки и делает то, что вам нужно.

+0

Не знал о inotifywait, и, похоже, у него большой потенциал. Узнают об этом, так как это будет удобно. Благодаря! – Henry