2012-04-08 4 views
2

내 voip 전화 어댑터가 호출이 들어올 때 로그 항목을 생성합니다. 로컬 우분투 시스템의 syslog,/var/log/linksys 파일로 전달할 수있었습니다. .로그.syslog 파일을 모니터 (따르기)하고 grep합니다.

이제는 인스턴트 발신자 표시로 사용하고 싶습니다. 중요한 줄에는 "INVITE sip"문자열이 포함되어 있으므로 다음과 같이 시도했습니다.

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

그러나 이것은 줄을 가져옵니다. 나는 발신자 이름과 전화 부분, "From :"문자열과 그 뒤의 첫 번째 @ 기호 사이의 부분에만 관심이 있습니다.

필자의 목표는 tail -f 또는 유사 (멀티 테일 시도) 파일을 따라갈 수 있지만 새로운 관련 줄이 로그에 추가 될 때만 이름과 전화 번호를 표시하는 것입니다. 여기

는 샘플 라인 (로그가 너무 다른 라인을 수신) :이 GNU/리눅스에있는 경우

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: 503[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을 사용해보세요. 이 둔한로의 grep

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

단지 파이프 출력 : 예뻐 인쇄와

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

동일한 스크립트 : 여기

내 둔한 한 라이너 (용도 일치하는 세 번째 인자 확장 둔한) 인 스크립트 :

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 | 도크는 작동하지 않았다. 하지만이를 수정하는 대신 syslog를 수정하여 INVITE 행만 캡처하므로 tail | gawk이 필요한 결과를 나에게주었습니다. 이제 전화가 울리기 시작하기 전에 누가 내 화면에서 전화를하는지 알 겠어. 고마워! – Henry

1

, 당신은에 inotifywait를 사용할 수 있습니다 파일에 대한 변경 사항을 모니터 한 다음 관심있는 행의 일부를 추출하고 필요한 것을 수행하는 스크립트를 트리거하십시오.

+0

inotifywait을 인식하지 못했고 잠재적 인 가능성이 많습니다. 확실히 도움이 될 것입니다 그것에 대해 배우게됩니다. 감사! 어떤 이유에서든지 – Henry