我分析来自多播地址的流。命令的输出如下所示:

...
Sep 03 19:06:45: INFO: Bitrate: 8241 Kbit/s
Sep 03 19:06:45: ERROR: Scrambled: 250=4792 251=132 252=132 253=263
...

我需要在比特率[8241]之后获取值,并在php脚本中设置第一个变量,而在加扰之后:第二个变量只在“=”[25025125253]之前。
示例$var1=8241; $var2=250,251,252,253。我发现如何grep -oP '(?<=Bitrate: )[0-9]+'所以我得到“8241”,但我需要两个变量我一步。

最佳答案

同时将所需的值grep到2个变量中是有问题的。
下面是一个完整的php解决方案(使用shell_exec函数调用awk脚本):

<?php

$command = 'yourcommand | awk \'/Bitrate/{ printf "%d ", $6 }/Scrambled/{ for(i=6;i<=NF;i++)'
                           . 'printf "%d ",substr($i,1,index($i,"=")) }\'
';
$result = trim(shell_exec($command));
if ($result) {
    $arr = explode(" ", $result);
    $bitrate = $arr[0];
    $scrambled = array_slice($arr, 1);
}

print_r('bitrate: ' . $bitrate . PHP_EOL);
print_r('scrambled: ');
print_r($scrambled);

格式化输出:
bitrate: 8241
scrambled: Array
(
    [0] => 250
    [1] => 251
    [2] => 252
    [3] => 253
)

10-08 03:13