ルーターから重要な情報を取得するために、Expect / TCL スクリプトを実行しています。
私の目的の 1 つは、参照としてルーターにログインした IP を使用して、ルーターの WAN インターフェイスの名前を取得することです。
ルーター IP の例: 66.66.66.66 - これは、変数 $rtrname に含まれています。
Expectを使用して、以下のデータ($expect_out(buffer))を次の式で評価し、値$wanに出力します...
表現:
regexp (.*?)(?=(?:\..*?)?\s{2,}$rtrname) $expect_out(buffer) wan
$expect_out(バッファ):
Router1#sh ip int brief
Interface IP-Address OK? Method Status Protocol
Embedded-Service-Engine0/0 unassigned YES NVRAM administratively down down
GigabitEthernet0/0 unassigned YES NVRAM up up
GigabitEthernet0/0.10 55.55.55.55 YES NVRAM up up
GigabitEthernet0/0.20 66.66.66.66 YES NVRAM up up
GigabitEthernet0/1 77.77.77.77 YES NVRAM up up
GigabitEthernet0/2 192.168.1.1 YES NVRAM up up
$rtrname == 66.66.66.66 の場合、これは $wan を GigabitEthernet0/0 として正しく返します。これは私が望むものです。
残念ながら、次のような出力では正しく動作しません。
Router2#sh ip int brief
Interface IP Address Status Protocol
eth 0/1 192.168.1.1 UP UP
eth 0/2 77.77.77.77 UP UP
fr 1.501 55.55.55.55 UP UP
fr 1.502 66.66.66.66 UP UP
これにより、'fr 1' を期待しているときに $wan が何も返されません。
私はいくつかの異なる正規表現ツールを使用しましたが、式は成功したようです。ドロップしないのは、コードにドロップしたときだけです。私は何が欠けていますか?
PS - 私はネットワーク エンジニアであり、本業のプロのコーダーではありません。:)