Cisco IOS `show version`からファームウェアバージョン番号を取得するための正規表現

StackOverflow https://stackoverflow.com//questions/11713356

質問

Cisco "show version"コマンド

の出力からファームウェアのバージョンを取得するのに役立ちます。

次に、SHOWバージョン出力の最初の行です(12.4(21A)JA1がファームウェア版):

Cisco IOS Software, C1240 Software (C1240-K9W7-M), Version 12.4(21a)JA1, RELEASE
SOFTWARE (fc1)
.

下記のコードにエラーが表示されます。正規表現パターンをコンパイルできませんでした:Quantifer operand無効

expect "*#" {send "show version\n"}
expect -re "(?<=Version/s)(.*)(?=/sRELEASE)" {set var1 $expect_out(1,string)}
puts "Firmware Version: $var1"
.

助けてくれてありがとう

役に立ちましたか?

解決

あなたの問題は2倍です。第一に、予想は見学の制約をサポートしていません(通常は通常のビルドではありません)。次に、あなたの正規表現はそれが使用しているどんな種類のスラッシュを混乱させます。TCLでブレースで定期的な脆弱性を設定することを常に良い考えであり、(拡張)私は、物事がより長くなるにつれて、物事が長くなると、マルチラインバージョンのexpectのマルチラインバージョンを使用することをお勧めします。

expect "*#" {send "show version\n"}
expect {
    -re {Version\s+(.*),\s+RELEASE} {
        set firmwareVersion $expect_out(1,string)
    }
}
puts "Firmware Version: $firmwareVersion"
.

中括弧で物事を置くことの唯一の欠点は、それでそれらを誤ってフォーマットすることです。私たちはそのような困難で生き残ることができます、私は思う...

他のヒント

オリジナル

expect "*#" {send "show version\n"}
expect -re "(?<=Version/s)(.*)(?=/sRELEASE)" {set var1 $expect_out(1,string)}
puts "Firmware Version: $var1"
.

最初に、DONALが予想される予想は見方をサポートしていないので...

また、私はあなたが対話している間に文字列と一致し、変数置換を実行することが少し挑戦していると思います。それはかなり可能ですが、これをやるのが簡単です...

提案

expect "*#" {send "show version\n"}
expect "*#" {send "# something else here"}
regexp {Version\s(\d.+?),\sRELEASE\sSOFTWARE} $expect_out(buffer) matched var1
puts "Firmware Version: $var1"
.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top