gpt4 book ai didi

linux - 在perl中拆分和过滤linux命令的输出

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:37:12 24 4
gpt4 key购买 nike

我正在创建一个 perl 脚本以在返回 SIP 中继状态的 PABX 系统上运行。我是 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}'

它返回状态列中的任何内容,在此示例中它返回

Registered

然后我想在 if 语句中比较状态并根据状态执行操作,不过这看起来很简单。

在这个例子中只有 1 个 SIP 中继,但也可以有很多。

最佳答案

使用 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 .

关于linux - 在perl中拆分和过滤linux命令的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26309644/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com