2010-12-11 15 views
0

Ich habe das folgende Skript, das tut, was ich willFormatierung Linux-Befehlsausgabe in php

<?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 ein Befehl in hylafax zur Überwachung Kanalstatus verwendet wird.

Beispielausgabe ist wie folgt:

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 

Jetzt möchte ich Modem ttyIAX017 (+1.999.555.1212) mit Kanal ändern 17. ich das gleiche für alle Kanäle mit jeweiligen Kanalnummer tun wollen. Gibt es einen Weg, dies zu tun?

Ich habe viel auf Google gesucht, konnte aber nichts relevantes finden.

Bitte helfen.

+0

Können Sie ein Beispiel für Ihre erwartete Ausgabe angeben? – ajreal

Antwort

0

die Linie ersetzen, die sagt

echo "$line \n"; 

zu

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

Wie funktionierts?

substr ($ line, 13, 2) berechnet die zwei zu druckenden Ziffern nach "Channel" und substr ($ line, 33) blendet den Teil der Zeichenfolge aus, den wir nicht drucken wollen.

Sie können bei Bedarf die Nummern 13, 2 und 33 ändern.

0

Vielen Dank und Ihre Lösung funktioniert. Ich habe gerade das Skript ändern einen Kanal pro Zeile zu zeigen, wie folgt:

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

Auch ist es eine Möglichkeit, erste Zeile und verwenden Sie den Code, indem Sie für den Rest der Leitungen gegeben zu überspringen. Beispiel: Normal Ausgang wäre:

 
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

Bevorzugte ausgegeben werden soll:

 
HylaFAX scheduler on Server.domain.pvt: Running 
Channel 01: Running and idle 
Channel 02: Running and idle 
Channel 03: Running and idle
Wenn möglich ich die erste Zeile überspringen möchten und zeigen Kanal Info verbleibenden eine pro Zeile.

0

Ich suchte in PHP-Handbuch und fand, was ich will. Ich habe die erste Zeile in dem Array übersprungen, indem den folgenden Code hinzufügen:

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

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

Vielen Dank sp2hari für Ihre Hilfe.