2014-10-10 2 views
1

SIP 트렁크의 상태를 반환하는 PABX 시스템에서 실행되는 perl 스크립트를 만듭니다. 펄과perl에서 linux 명령 출력 분할 및 필터링

/usr/sbin/asterisk -rx "sip show registry" 

Host   dnsmgr Username  Refresh State  Reg.Time     
x.x.x.x:5060 N  02xxxxxxxx 105  Registered Thu, 28 Aug 2014 06:34:21 
1 SIP registrations. 

나는 사용자 이름 필드를 필터링하고 상태 필드를 얻으려면 다음과 같은 출력을 반환 다음 명령의 출력을 사용하여 스크립트를 만들려면 매우 새로운 해요 , 나는 다음 명령을 사용하여 명령 줄에서 쉽게이 작업을 수행 할 수 있지만 perl에서 최선을 다해 작업하는 데 어려움을 겪고 있습니다. 또한 perl 함수를 사용하거나 grep 및 awk와 같은 프로그램에 데이터를 다시 전달하는 것이 가장 좋습니다.

/usr/sbin/asterisk -rx "sip show registry" | awk '/02xxxxxxxx/ {print $5}' 
상태 열에서,이 예제에서는이

Registered 

내가 다음 if 문 상태를 비교하고 상태에 따라 작업을 수행 할 반환 무엇이든 반환

이 조금 보인다 쉬운 충분히.

이 예에서는 SIP 트렁크가 하나 뿐이지 만 많은 경우가있을 수 있습니다.

답변

4

Perl 함수를 사용하면 더 빠르고 쉽게 디버깅 할 수 있습니다.

open my $AST, '-|', '/usr/sbin/asterisk', '-rx', 'sip show registry' or die $!; 
while (<$AST>) { 
    print +(split)[4], "\n" if /02xxxxxx/; 
} 

또는 좀 더 자세한 정보 :

open my $AST, '-|', '/usr/sbin/asterisk', '-rx', 'sip show registry' or die $!; 
while (my $line = <$AST>) { 
    if ($line =~ /02xxxxxx/) { 
     my @items = split ' ', $line; 
     print $items[4], "\n" ; 
    } 
} 

가 더 읽기 : open, print, split, Perl syntax.

+0

최적화 된 one-liner 버전 대신 split, print 및 if 문과 같은 주요 구성 요소로 위 코드를 제공하면 더 잘 이해할 수 있습니다. Thanks –

+0

@MattPrice : 업데이트를 확인하십시오. – choroba

+0

@ choroba이 다중 매개 변수 형식의 open이 활성화 된 perl의 버전을 알고 있습니까? 5.12에 없지만 5.18에있는 것 같습니다. 또한 혜택을 간단히 설명해 주시겠습니까? 나는 이미 몇 가지 이점을 알고 있지만 귀하의 경험에 감사 할 것이라고 믿습니다. – Miller