1

現在、「SalVhugoV3」に関心のある SNMP ユーザーを持つ以下のメニュー応答から行番号を抽出するスクリプトがあります。

青色のメニュー応答は次のとおりです

SNMP ユーザーを選択します: 1) cmssnmp 2) atlas 3) SalVhugoV3 選択肢を入力します (1-3):

スクリプトのこの作業セクションは、「SalVhugoV3」を含む文字列を探し、探しているユーザーのオプションであるため、オプション #3 を取り除きます。次に、「選択を入力してください」プロンプトの snmpuserChoice として「3」を送信します。

リスト/メニューから V3 ユーザーを選択し、$V3USER を grep してその番号を送信します

    expect -re ".*\\(.*\\):" {
    append rawOut $expect_out(buffer)
    regexp { .*(([0-9])\) [puts $V3USER].*) } $expect_out(buffer) cmdOut snmpUser snmpUserChoice
    exp_send -- "$snmpUserChoice\r"
}

私は同じことをしようとしていますが、この拡張応答では、この場合に探しているユーザーのオプションは、文字列の末尾に「SalVhugoV3」が含まれているため、オプション「5」であることがわかります。これが「regexp { . (([0-9])) [$V3USER を挿入]。) } 「しかし、オプション「5」番号を取得して「exp_send」経由で送信できるようにするための変更方法は正確にはわかりません。

削除する SNMP 接続を選択します。1) NMS への接続: ホスト 135.9.60.143、ポート 162、ユーザー cmssnmp 2) SAL への接続: ホスト 135.9.158.252、ポート 162、ユーザー cmssnmp 3) SAL への接続: ホスト 135.9.158.236、ポート 162、ユーザー cmssnmp 4) NMS への接続: ホスト 135.105.6.67、ポート 162、ユーザー アトラス 5) SAL への接続: ホスト 135.60.25.147、ポート 162、ユーザー SalVhugoV3 選択肢 (1 ~ 5) を入力します。

リスト/メニューから V3 ユーザーを選択し、$V3USER を grep してその番号を送信します

    expect -re ".*\\(.*\\):" {
    append rawOut $expect_out(buffer)
    regexp { .*(([0-9])\) [puts $V3USER].*) } $expect_out(buffer) cmdOut snmpUser snmpUserChoice
    exp_send -- "$snmpUserChoice\r"
}
4

1 に答える 1

0
regexp "((\[0-9\])\\)\[^\\)\]*$V3USER)" $expect_out(buffer) cmdOut snmpUser snmpUserChoice

V3USER=atlas の場合、次のようになります。

snmpUser='4) NMS への接続: ホスト 135.105.6.67、ポート 162、ユーザー アトラス'

snmpUserChoice='4'

読みやすくし、エスケープを避けるために:

set gen_expr {([0-9])\)[^\)]*}
set spec_expr "($choice_expr$V3USER)"
regexp $spec_expr $expect_out(buffer) cmdOut snmpUser snmpUserChoice

ところで:用語は{ ... [puts $V3USER] }私を困惑させます。中括弧にはエスケープがないため、これは正規表現の一部として解釈されるだけで、文字 'p'、'u'、't'、's'、' '、$' などのいずれかが必要です ...

于 2013-02-20T11:57:16.567 に答える