私はプログラミング スキルが限られているネットワーク エンジニアです。一般的なテキスト ファイル内のテキストを検索するために、NET4.0 に基づく dnGREP というツールを使用しています。仕事の一環として私がしなければならないことは、任意のインターフェイスの構成に適用されるコマンドを見つけることです。
私の考えは、2 つの項目で制限された正しい REGEX を見つけようとすることです。しかし、効率的な REGEX を構築しようとしているときに、いくつかの問題があります。
Cisco デバイスの「show running-configuration」から次の文字列を取得します。
interface GigabitEthernet0/0/0/1.1982
ipv4 address 10.111.193.125 255.255.255.252
ipv4 unreachables disable
load-interval 30
dot1q vlan 1982
!
interface GigabitEthernet0/0/0/1.1983
ipv4 address 10.113.193.125 255.255.255.252
ipv4 unreachables disable
load-interval 30
dot1q vlan 1983
!
interface GigabitEthernet0/0/0/2.1982
ipv4 address 10.111.193.129 255.255.255.252
ipv4 unreachables disable
load-interval 30
find me
dot1q vlan 1982
!
ご覧のとおり、インターフェイス構成は 2 つの項目によって制限される可能性があります。
開始アイテム:
interface
最終品目:
!
文字列を指定すると、その文字列とインターフェイス コンテキストに一致する REGEX が必要になります。
条件:
- REGEX は、「!」まで「interface」で区切られたインターフェイス コンテキストを返す必要があります。
- REGEX はすべてのオカレンスを出力する必要があります
これまでの私のREGEXは次のとおりです。
^interface([\s\S]*?)find me([\s\S]*?)!
壊す:
^interface--「"interface" が行頭のときに検索を開始します。」
([\s\S]*?----"改行を含む任意の文字を検索"
find me----「find me は探している文字列/コマンドです」
([\s\S]*?!----" !が見つかるまで印刷を続ける"
もちろん、上記のREGEXは私が期待することをしません。これだけを返す必要があります:
interface GigabitEthernet0/0/0/2.1982
ipv4 address 10.111.193.129 255.255.255.252
ipv4 unreachables disable
load-interval 30
find me
dot1q vlan 1982
!
代わりに、最初のインターフェイスが見つかった後にすべてのものを返しますが、これは私が望むものではありません。
なぜこれが起こっているのかはわかっていますが、それを修正する方法がわかりません。
「正規表現は、最初のインターフェイスが見つかったときにfind meの検索を開始しますが、に到達したときに文字列find meが見つからない場合は停止する必要がありますが、一致しないと宣言しますが、ファイルの終わりまで続行し、含まれるすべてのインターフェイスコンテキストを出力する必要があります文字列は私を見つけます"
私の説明が明確であることを願っています。どんな助けでも本当に感謝しています=)。