私はTCLを使ってciscoルータのすべてのインターフェイスを処理しようとしています。私のTCL式が重複した結果を返すのはなぜですか?
set int_out [exec "show interface description"]
OUTPUT
Interface Status Protocol Description
Fa0/0 up up ** REDACTED **
Fa0/0.209 up up ** REDACTED **
Fa0/0.790 up up ** REDACTED **
Fa0/1 admin down down
:現時点では私は、次の2つのコマンドを使用しています。ここ
foreach int [regexp -all -line -inline "^(\[^ ]+)" $int_out] { show clock; puts $int }
OUTPUT
18:25:16.461 UTC Fri Jun 23 2017Interface
18:25:16.465 UTC Fri Jun 23 2017Interface
18:25:16.469 UTC Fri Jun 23 2017Fa0/0
18:25:16.469 UTC Fri Jun 23 2017Fa0/0
18:25:16.473 UTC Fri Jun 23 2017Fa0/0.209
18:25:16.473 UTC Fri Jun 23 2017Fa0/0.209
18:25:16.477 UTC Fri Jun 23 2017Fa0/0.790
18:25:16.477 UTC Fri Jun 23 2017Fa0/0.790
18:25:16.481 UTC Fri Jun 23 2017Fa0/1
18:25:16.481 UTC Fri Jun 23 2017Fa0/1
私の目標は、インタフェース記述が生成する表示し、出力の各行からインターフェイス名をつかむし、画面のそれをプリントアウトすることです。しかし、あなたが見ることができるように、私は画面上にデータを印刷するために行くと重複してしまいます。私は、これは最初に何らかの種類の画面ログ機能が原因である可能性があると考えましたが、出力に含まれているタイムスタンプはそうでないことを示しています。たとえば、最初のインターフェイス行のタイムスタンプは18:25:16.461でしたが、2番目のインターフェイス行のタイムスタンプは18:25:16.465でした。
この問題を解決するにはどうすればよいですか?私はそれが私の正規表現の文字列で、各行から最初の単語をつかむ問題かもしれないと思う。
ありがとう!そのトリックをした。 foreachの多変数形式でも良いアイデア – lacrosse1991