昨日の内容に引き続き、今日も早速実践していきましょう。正規表現は非常に強力で複雑であるため、前回学習した内容の範囲を超えているこの実験の部分については、関連ドキュメントを参照してください。このチュートリアルは、運用および保守エンジニアがすぐに作業を開始できるようにするためのものです。理解できない場合でも、直接代替ツールとして使用することもできます。
Telnet および SSH 自動検査スクリプトの正規表現を確認してください: DeviceName = re.search('.*(?=#show run)',telreply).group()、telreply は検査の内容であり、ログの先頭を開くと確認できます:
R1>enable Password: R1#terminal length 0 R1#show run Building configuration...
明らかに、この正規表現は '#show の前の任意の文字と一致します。 ' (改行文字を除く) の場合は、もちろん R1 です。
別のより複雑な実験を行って、より多くの構成フラグメントを傍受してみましょう。たとえば、次の構成では、このデバイスの各インターフェイスの IP アドレスを見つける必要があります:
############################ ! interface FastEthernet0/0 ip address 192.168.1.200 255.255.255.0 duplex half ! interface GigabitEthernet1/0 no ip address shutdown negotiation auto ! interface Serial2/0 ip address 192.168.2.200 255.255.255.0 ! ############################
それをログに割り当てます: (実際の環境では、それを直接読み取ります。ログを取得)
log = '' #ここには引用符が 3 つあります。Enter キーを押して上記の設定を貼り付け、引用符を 3 つ入力して Enter キーを押します。 (複数行の文字列を貼り付けるには、3 つの引用符を使用できます)。
ここでログを確認してください:
>>> log '\n!\ninterface FastEthernet0/0\n ip address 192.168.1.200 255.255.255.0\n duplex half\n!\ninterface GigabitEthernet1/0\n no ip address\n shutdown\n negotiation auto\n!\ninterface Serial2/0\n ip address 192.168.2.200 255.255.255.0\n!\n' >>>
文字列はすべて 1 行にあり、改行は実際には 'n' であることがわかります。 print(log) を使用すると、表示効果は次のようになります。上は改行あり。
Cisco 機器の設定が感嘆符 (!) で区切られており、各インターフェイスの先頭が「interface」であり、IP アドレスの前に「ip」が付いていることもわかります。 住所'。したがって、正規表現に「interface(.*)n」があり、これが特定のインターフェイス設定の最初の行と一致することは想像に難くありません。設定は「!」で終わるため、「!」の前の式には「(?=!)」が必要です。中間の設定の行数は可変です。確実に言えるのは、少なくとも 1 行の設定があり、改行文字、つまり '(.*n)+?)' が存在するということです。ここでの「+?」は、前の式 (.*n) を 1 回以上非貪欲に一致させることを意味します。かっこを使用するとキャプチャ効果が得られますが、キャプチャ効果をオフにしたい場合は、左かっこの後に ?: を続けます。この実験ではすべての文字列を照合するため、「re.findall()」が使用されます。これ以上の説明は不要です。コードを参照してください:
ljds = re.findall('interface(.*)\n((?:.*\n)+?)(?=!)',log) >>> ljds [(' FastEthernet0/0', ' ip address 192.168.1.200 255.255.255.0\n duplex half\n'), (' GigabitEthernet1/0', ' no ip address\n shutdown\n negotiation auto\n'), (' Serial2/0', ' ip address 192.168.2.200 255.255.255.0\n')]
その結果、各インターフェイスの設定は、リストにネストされたインターフェイス名 + 設定のタプルに分割されます。
次に、インターフェイスと IP を再度キャプチャするための For ループを作成します。
操作の効果:
テストは完了です。各インターフェースの IP アドレスを取得するという目的は達成されます。
この方法を学んだので、今後はこの方法を使用して、たとえば、インターフェイスのステータスが元々「UP」であった場合に「DOWN」に変化した場合に、デバイスの構成やステータスを監視することができます。通知する電子メールを送信します。
上記は Python 正規表現 [2] の内容です。さらに関連する内容については、PHP 中国語 Web サイト (www.php.cn) に注目してください。