我创建了一个在PABX系统上运行的perl脚本,该系统返回SIP中继的状态。我是perl的新手,想要使用以下命令的输出
创建脚本/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}'
返回state列中的任何内容,在此示例中返回
Registered
然后我想比较if语句中的状态并根据状态执行一个动作,但这一点似乎很容易。
在此示例中,只有1个SIP中继,但可能有很多。
答案 0 :(得分: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