监视(跟随)和grep一个syslog文件

时间:2012-04-08 05:34:40

标签: shell grep voip tail syslog

我的voip电话适配器在呼叫进入时生成一个日志条目。我设法将它转发到我本地ubuntu机器的syslog,转发到名为/var/log/linksys.log的文件。

现在我想用它作为即时来电显示。重要的一行包括字符串“INVITE sip”,所以我尝试了:

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

但这带来了整线。我只对带有来电者姓名和电话的部分感兴趣,在字符串“From:”和之后的第一个@符号之间。

我的目标是能够使用tail -f或类似的方式跟踪文件(尝试过multitail),但只有在新的相关行添加到日志时才显示名称和电话号码。 (日志也接收其他行)

以下是一个示例行:

Apr  8 01:06:10 INVITE sip: 999999@192.168.0.102:5060 SIP/2.0#015#012Via: SIP/2.0/UDP 111.111.11.111:5060;branch=z9hG4bK5f142476;rport#015#012From: "SMITHSON D" <sip:8885551234@111.111.11.111>;tag=as410515ed#015#012To: <sip:999999@192.168.0.102:5060>#015#012Contact: <sip:8885551234@111.111.11.111>#015#012Call-ID: 50354db42555555555aab68633cbb2e4@111.111.11.111#015#012CSeq: 102 INVITE#015#012User-Agent: VoIPMS/SERAST#015#012Max-Forwards: 70#015#012Remote-Party-ID: "SMITHSON D" <sip:8885551234@111.111.11.111>;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

非常感谢任何帮助......

2 个答案:

答案 0 :(得分:2)

尝试使用awk

这是我的gawk one-liner(使用gawk第三个参数扩展来匹配):

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脚本中:

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]}'

答案 1 :(得分:1)

如果这是在Gnu / Linux上,您可以使用inotifywait来监视对文件的更改,然后触发一个脚本,该脚本提取您感兴趣的行的部分并执行您需要的操作。