grep来自命令输出的特定字符串

时间:2017-09-03 18:05:59

标签: php linux grep

我从多播地址分析流。命令输出如下:

...
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脚本中设置frist变量,并且在加扰后之后才在&#34; =&#34;之后[250,251,252,253]为第二个变量。 示例$var1=8241; $var2=250,251,252,253。我找到了grep -oP '(?<=Bitrate: )[0-9]+'如何获得&#34; 8241&#34;但我需要两个变量一步。

1 个答案:

答案 0 :(得分:1)

将所需的值同时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
)