php从输出中剥离特定结果
我正在使用php获取一个shell输出,它为我列出了所有php从输出中剥离特定结果,php,preg-replace,shell-exec,Php,Preg Replace,Shell Exec,我正在使用php获取一个shell输出,它为我列出了所有meetme频道。我只想从下至上抓取具有0001的confnum。在下面的示例中,我想分配变量:$confnum=“32” 以下是我目前的代码: $output = shell_exec("asterisk -rx 'meetme list'"); echo $output; 请帮助我获取$output的结果 下面是执行meet.php文件时得到的结果 [root@C1033-TF agi-bin]# php meet.php Conf
meetme
频道。我只想从下至上抓取具有0001
的confnum
。在下面的示例中,我想分配变量:$confnum=“32”代码>
以下是我目前的代码:
$output = shell_exec("asterisk -rx 'meetme list'");
echo $output;
请帮助我获取$output的结果
下面是执行meet.php文件时得到的结果
[root@C1033-TF agi-bin]# php meet.php
Conf Num Parties Marked Activity Creation Locked
67 0001 N/A 00:00:16 Dynamic No
28 0001 N/A 00:00:19 Dynamic No
65 0001 N/A 00:01:14 Dynamic No
42 0001 N/A 00:01:18 Dynamic No
32 0001 N/A 00:04:18 Dynamic No
* Total number of MeetMe users: 5
请记住,有时Conf Num中会有不止0001个参与方。在上面的示例中,我只想抓住这一行:
32 0001 N/A 00:04:18 Dynamic No
这是具有0001的最后一行,因此分配$confnum=“32”;去吧
非常感谢在这方面我能得到的任何帮助。您可以使用exec而不是shell\u exec并遍历输出行:
<?php
$output = array();
exec("asterisk -rx 'meetme list'", $output);
foreach ($output as $line) {
if (preg_match('/^32\s/', $line)) { //Check line starts with 32
echo $line;
}
}
好的,假设是Linux,您完全可以在shell中执行此操作:
- 筛选最后一行:
grep-v“会议服务器总数”
- 筛选第一行:
grep-v'confnum'
- 并且只打印一个
confnum
:awk'BEGIN{result=”“;}{if($2==“0001”){result=$1;}}}END{print result;}'
因此,整个代码:
$output = shell_exec("asterisk -rx 'meetme list' | grep -v 'Total number of MeetMe isers' | grep -v 'Conf Num' | awk 'BEGIN{ result=\"\"; } {if( \$2 == \"0001\"){result=$1;}} END {print result;}'");
// $output should contain your data :)
或使用:
针对评论:
您应该学习正则表达式语法和and的含义<代码>\d+
将匹配0
、01
或00000000000000000000000000
:)。但有时它不是32。。。我只想要最后一行conf numb,它有0001个itI,我尝试了这个,并得到了这个错误:PHP警告:shell_exec()只需要1个参数,2在第3行sorry的/var/lib/asterisk/agi bin/meet2.PHP中给出,我的意思是exec而不是shell_exec。我已经准备好编辑答案了我怎么能只抓住第一组数字而不是整行?你是说32?我修改了脚本,你应该在$firstNumber变量中得到它。我刚刚尝试了第一个shell方法,我发现了这个错误:PHP解析错误:语法错误,第3行的/var/lib/asterisk/agi bin/meet.PHP中出现意外的T_LNUMBER你的第二个建议很好,但它给出了整行代码,我只想要Conf Num数字……而且Conf数字并不总是两位数,它可以是3-4位数well@thevoipman我修复了字符串中未转义的“
。您应该自己执行此操作,而不仅仅是“给我kodes”并粘贴它。对于第二部分…尝试使用打印($matches)
和print\r($match)
在循环中。同样,请使用大脑,不要只是复制代码。我正在尽力调试,但是,我得到的结果是空的
$output = shell_exec("asterisk -rx 'meetme list' | grep -v 'Total number of MeetMe isers' | grep -v 'Conf Num' | awk 'BEGIN{ result=\"\"; } {if( \$2 == \"0001\"){result=$1;}} END {print result;}'");
// $output should contain your data :)
$output = shell_exec("asterisk -rx 'meetme list'");
$matches = array();
$result = null;
preg_match_all('~^\s*(\\d+)\\s+0001~', $output, $matches, PREG_SET_ORDER);
foreach( $matches as $match ){
$result = $match[1];
}