2012-06-15 59 views
6

私は、次の正規表現を使用してDEF_23を一致させたい場合は:

expect { 
    -re "DEF_\[0-9]*" 
    set result $expect_out(1,string) 
} 

を、それが配列のそのような要素が言うんなぜですか? この$ expect_outの仕組みは? DEFという結果を代入したいのであれば、regexpを使ってDEFを取得し、変数結果に代入する方法は?

+1

'set'行に余分な中カッコがあることを意味しましたか?それ以外の場合は、実際に '期待'の非常に奇妙な使用です... –

答えて

9

あなたが探しているのはexpect_out(0,string)です。配列要素1,stringは、正規表現にキャプチャ括弧がある場合は入力されます。 (またはEOFまたはfull_buffer)、任意マッチング以前不一致出力がに保存されたパターンにマッチすると

expect manpageのドキュメントの expect_outの使用はコマンドを期待する文書変数 expect_out(バッファ)。最大9個の正規表現の部分文字列一致が変数 expect_out(1、string) expect_out(9、string)に保存されます。 -indicesフラグがパターンの前に使用されている場合、10文字列の開始および終了インデックス(lrange)は、変数 expect_out(X、start)および expect_out 、end)ここで、Xは数字で、バッファ内の部分文字列の位置に対応します。 0はパターン全体にマッチしたストリングを指し、globパターンとregexpパターンに対して生成されます。

マンページには例があります。

1

上記の説明は正確ではないようです。この例をチェック :$ expect_out(1列)または$ expect_out(バッファ)を用いた場合

$ cat test.exp 
#!/usr/bin/expect 

set timeout 5 
log_user 0 

spawn bash 

send "ls -1 db*\r" 
expect { 
    -re "^db.*$" { 
    set bkpfile $expect_out(0,string) 
    } 
} 

send_user "The filename is: $bkpfile\n" 

close 
$ ls -1 db* 
dbupgrade.log 
$ ./test.exp 
can't read "bkpfile": no such variable 
    while executing 
"send_user "The filename is: $bkpfile\n"" 
    (file "./test.exp" line 15) 
$ 

テスト結果が同じです。 何か不足していますか?これは予期された動作ですか?

0

アレクサンダー - "\ ndb。* $"にマッチすると動作します。

あなたはexp_internal 1をオンにした場合、あなたはバッファが表示されますが、このようなものが含まれています: "LS -1デシベル* \ rを\ ndbupgrade.log \ rを\ N08:46:09"

ので、キャレットを(^)あなたのパターンマッチをオフにします。

関連する問題