2016-05-16 11 views
1

を期待して、私の出力から、次を抽出しようとしている:正規表現で私はちょうどscripting.I期待学び始め

core.4046140998.01.10.133211 

期待するスクリプトで、次のcommand.can誰かを使用して私がどこを教えてください間違っているのですか?私は変数全体にこの文字列全体(core.4046140998.01.10.133211 *)を格納して、何らかのアクションを実行したいと思っています。

expect -re {^(core)\.*} {puts $expect_out(0,string)} 

このパッケージを使用するには、どのパッケージをインポートする必要がありますか?

+0

^(コア)\ .. *(\ *)$ ' – rock321987

+0

ok ... expect_out(0、string)の出力にはどのようなものがありますか? – john

+0

文字列 'core.4046140998.01.10.133211 *' – rock321987

答えて

2

を、「コア」とは、入力文字列の先頭に行の先頭に表示されますが、ないかもしれません。証明するために:注意すべき

$ expect 
expect1.1> spawn sh 
spawn sh 
8043 
expect1.2> send "echo core.1234\r" 
expect1.3> exp_internal 1 
expect1.4> expect -re {^core.*} 
Gate keeper glob pattern for '^core.*' is 'core*'. Activating booster. 

expect: does "" (spawn_id exp6) match regular expression "^core.*"? Gate "core*"? gate=no 
sh-4.3$ echo core.1234 
core.1234 
sh-4.3$ 
expect: does "sh-4.3$ echo core.1234\r\ncore.1234\r\nsh-4.3$ " (spawn_id exp6) match regular expression "^core.*"? Gate "core*"? gate=yes re=no 
expect: timed out 
expect1.5> expect -re {(?n)^core.*} 
Gate keeper glob pattern for '(?n)^core.*' is 'core*'. Activating booster. 

expect: does "sh-4.3$ echo core.1234\r\ncore.1234\r\nsh-4.3$ " (spawn_id exp6) match regular expression "(?n)^core.*"? Gate "core*"? gate=yes re=yes 
expect: set expect_out(0,string) "core.1234\r" 
expect: set expect_out(spawn_id) "exp6" 
expect: set expect_out(buffer) "sh-4.3$ echo core.1234\r\ncore.1234\r" 
expect1.6> puts ">>>$expect_out(0,string)<<<" 
<<<core.1234 

もの:

  • -re {^core.*}が一致しませんでした期待。

    expect: does "sh-4.3$ echo core.1234\r\ncore.1234\r\nsh-4.3$ " (spawn_id exp6) match regular expression "^core.*"? Gate "core*"? gate=yes re=no 
    # ............^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
    

    それはとても「正常な」アンカーが

  • を動作しません使用して、私が送信されたコマンドで始まる:我々は一致しようとしているもののメッセージ
  • ノートを「タイムアウトになりました」を参照してください。

  • 私が期待する次のものは-re {(?n)^core.*}です。このと一致します。

    • (?n)たちは、「改行を区別する」マッチングたい正規表現エンジンに指示します少し-使用Tcl regex命令です。
    • 改行を区別するマッチング^を複数行の文字列内の改行の直後に一致させることができる.(ここでは、より関連性の高い)改行とが一致しないことを意味する(同様に$用)
  • 音符出力すなわち私のputsコマンドの奇妙に見えます。これは、$expect_out(0,string)の末尾にあるキャリッジリターンによるものです。それに注意して、必要な

としてstring trimを使用し、ここでお持ち帰りレッスンがある:プロンプトと送られたコマンドがで取得することができますので、

  • は、コマンドの出力を取り出すことは期待に難しいことができます道。
  • 使用すると、パターンが一致しない理由を確認するデバッグが必要です。
+0

ちょっとグレン。 – john

1

は、あなたは見逃している.\.後:

^(core)\..*(\*)$ 

\.リテラル..マッチ任意の1文字に一致します。あなたは貪欲でないバージョンを使用することができます

または:これは期待しているので

^(core)\.[^*]*(\*)$ 
+0

が含まれているはずですが、出力を返さないのですが... – john

+0

@john私の編集内容を確認してください.. – heemayl

関連する問題