1

私はphpを使用して、すべてのmeetmeチャネルを一覧表示するシェル出力を取得しています。Conf Num下から上に持っているものをつかみたいだけです0001。以下の私の例では、変数を割り当てたいと思います:$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" を割り当てます。それに。

これについて私が得ることができるどんな種類の助けも大歓迎です.

4

2 に答える 2

1

さて、Linux を想定すると、純粋にシェルでこれを行うことができます。

  • 最後の行をフィルタリング:grep -v 'Total number of MeetMe isers'
  • 最初の行をフィルタします:grep -v 'Conf Num'
  • 1つだけ印刷しますConf Numawk '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 :)

または使用preg_match_all()

$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];
}

コメントへの反応:

正規表現の構文と および の意味を学習する必要が\dあり+ます。、または:)\d+に一致します。00100000000000000000000000000000000

于 2013-04-16T10:47:36.223 に答える