在php中格式化linux命令输出

时间:2010-12-11 17:45:47

标签: php linux formatting

我有以下脚本可以完成我想要的操作

<?php
$data = array();                // define array

exec('faxstat -s', $data, $ret);     // execute command, output is array
echo "<pre>";

if ($ret == 0) {                // check status code. if successful
    foreach ($data  as $line)  {  // process array line by line
    echo "$line \n";

    }
} else {
    echo "Error in command";    // if unsuccessful display error
}

echo "</pre>";
?>

FAXSTAT是hylafax用于监控通道状态的命令。

示例输出如下:

Modem ttyIAX017 (+1.999.555.1212): Running and idle 
Modem ttyIAX018 (+1.999.555.1212): Running and idle 
Modem ttyIAX019 (+1.999.555.1212): Running and idle 
Modem ttyIAX020 (+1.999.555.1212): Running and idle 
Modem ttyIAX021 (+1.999.555.1212): Running and idle 

现在我想用频道17修改Modem ttyIAX017 (+1.999.555.1212)。 我想对所有具有相应频道号的频道做同样的事情。有没有办法做到这一点。

我在谷歌搜索过很多但找不到任何相关内容。

请帮忙。

3 个答案:

答案 0 :(得分:0)

替换

的行
echo "$line \n";

echo "Channel ".substr($line, 13, 2)." ".substr($line, 33);

这是如何运作的?

substr($ line,13,2)计算在“Channel”之后打印的两个数字,substr($ line,33)隐藏我们不想打印的字符串部分。

如果需要,您可能需要更改数字13,2和33.

答案 1 :(得分:0)

谢谢你的解决方案。 我只需修改脚本以显示每行一个通道,如下所示:

echo "Channel ".substr($line, 12, 3)." ".substr($line, 33)." \n";

还有一种方法可以跳过第一行并使用你给出的代码用于其余行。 示例:正常输出将为:

HylaFAX scheduler on Server.domain.pvt: Running
Modem boston18 (+1.999.555.1212): Running and idle
Modem boston10 (+1.999.555.1212): Running and idle

首选输出应为:

HylaFAX scheduler on Server.domain.pvt: Running
Channel 01: Running and idle
Channel 02: Running and idle
Channel 03: Running and idle
如果可能的话,我想跳过第一行,每行显示一个剩余的频道信息。

答案 2 :(得分:0)

我正在研究php手册,找到了我想要的东西。 我通过添加以下代码跳过了数组中的第一行:

    if(!isset($flag_first)) { //skip first line from array
    $flag_first=1;
    continue;}

echo“Channel”.substr($ line,12,3)。“”。sububtr($ line,33)。“\ n”;

谢谢sp2hari的帮助。