1

私はプログラミング スキルが限られているネットワーク エンジニアです。一般的なテキスト ファイル内のテキストを検索するために、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が見つからない場合は停止する必要がありますが、一致しないと宣言しますが、ファイルの終わりまで続行し、含まれるすべてのインターフェイスコンテキストを出力する必要があります文字列は私を見つけます"

私の説明が明確であることを願っています。どんな助けでも本当に感謝しています=)。

4

1 に答える 1

1

次の正規表現を試してください。

interface\s*(?<text>[^!]+find me[^!]+)(?:!)?

説明:

interface\s*- 「インターフェース」という単語の後に 0 個以上の空白が続く。

(?<text>[^!]+find me[^!]+)- text「!」以外の任意の文字、1 回以上の繰り返し、文字列「find me」を含むグループ。

(?:!)?- 「!」に一致します。ただし、キャプチャしないでください。0 または 1 回の繰り返し (文字が欠落している場合に最後の段落に対応するため)。

于 2012-07-04T04:15:13.413 に答える