私は、次の正規表現を使用してDEF_23
を一致させたい場合は:
expect {
-re "DEF_\[0-9]*"
set result $expect_out(1,string)
}
を、それが配列のそのような要素が言うんなぜですか? この$ expect_outの仕組みは? DEF
という結果を代入したいのであれば、regexpを使ってDEFを取得し、変数結果に代入する方法は?
私は、次の正規表現を使用してDEF_23
を一致させたい場合は:
expect {
-re "DEF_\[0-9]*"
set result $expect_out(1,string)
}
を、それが配列のそのような要素が言うんなぜですか? この$ expect_outの仕組みは? DEF
という結果を代入したいのであれば、regexpを使ってDEFを取得し、変数結果に代入する方法は?
あなたが探しているのは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パターンに対して生成されます。
マンページには例があります。
上記の説明は正確ではないようです。この例をチェック :$ 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)
$
テスト結果が同じです。 何か不足していますか?これは予期された動作ですか?
アレクサンダー - "\ ndb。* $"にマッチすると動作します。
あなたはexp_internal 1をオンにした場合、あなたはバッファが表示されますが、このようなものが含まれています: "LS -1デシベル* \ rを\ ndbupgrade.log \ rを\ N08:46:09"
ので、キャレットを(^)あなたのパターンマッチをオフにします。
'set'行に余分な中カッコがあることを意味しましたか?それ以外の場合は、実際に '期待'の非常に奇妙な使用です... –