shell - 监视(跟踪)并 grep 系统日志文件

标签 shell grep voip tail syslog

当有电话进来时,我的 voip 电话适配器会生成一个日志条目。我设法将其转发到本地 ubuntu 计算机的系统日志,名为/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: <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="61585858585858215058534f5057594f514f505153" rel="noreferrer noopener nofollow">[email protected]</a>:5060 SIP/2.0#015#012Via: SIP/2.0/UDP 111.111.11.111:5060;branch=z9hG4bK5f142476;rport#015#012From: "SMITHSON D" <sip:<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="ead2d2d2dfdfdfdbd8d9deaadbdbdbc4dbdbdbc4dbdbc4dbdbdb" rel="noreferrer noopener nofollow">[email protected]</a>>;tag=as410515ed#015#012To: <sip:<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="162f2f2f2f2f2f56272f243827202e382638272624" rel="noreferrer noopener nofollow">[email protected]</a>:5060>#015#012Contact: <sip:<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="d0e8e8e8e5e5e5e1e2e3e490e1e1e1fee1e1e1fee1e1fee1e1e1" rel="noreferrer noopener nofollow">[email protected]</a>>#015#012Call-ID: <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="6c595c5f5958080e585e5959595959595959590d0d0e5a545a5f5f0f0e0e5e09582c5d5d5d425d5d5d425d5d425d5d5d" rel="noreferrer noopener nofollow">[email protected]</a>#015#012CSeq: 102 INVITE#015#012User-Agent: VoIPMS/SERAST#015#012Max-Forwards: 70#015#012Remote-Party-ID: "SMITHSON D" <sip:<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="5b6363636e6e6e6a69686f1b6a6a6a756a6a6a756a6a756a6a6a" rel="noreferrer noopener nofollow">[email protected]</a>>;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

非常感谢您的帮助...

最佳答案

尝试使用awk

这是我的 gawk 一行(使用 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]}'

关于shell - 监视(跟踪)并 grep 系统日志文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10060646/

相关文章:

android - Android 中的群组 VOIP 通话

sip - 如何模拟sip协议(protocol)调用voip电话

bash - 使用 sed 在一组行上方添加行

linux - 如何使用find和exec执行多条命令

linux - 在 Ubuntu Xenial 中删除空格只写一个长字符串

linux - 为 0 或 4(不是 1、2、3)指定匹配重复

php - 使用PHP在Shell中运行Docker

linux - 如何在 linux 中最后一次出现特定命令之前运行所有命令

vim - 在vim中从grep中选择结果文件