WinMergeで、ACLの行頭のシーケンス番号を無視して比較したい

見出し



本記事の内容は、WinMerge バージョン2.16.30.0にて確認したものです。

■ACLのシーケンス番号が、差分の比較時に邪魔になる

ネットワーク機器のコンフィグの差分を比較する際に、WinMergeを利用されている方もいると思います。
しかし比較の際に、ACLのシーケンス番号が邪魔になりがちだと思います。
シーケンス番号がズレると、ACL条件が同じでも差分としてヒットしてしまうため、視認性が悪いです。

以下のコンフィグの差分を、WinMergeでとった例を示します。
【変更前コンフィグ】
ip access-list extended EXAMPLE-ACL
  10 permit tcp host 192.168.0.1 host 10.1.1.1 eq 22
  20 permit tcp host 172.16.10.1 host 10.1.1.1 eq 22
  30 permit tcp host 172.16.10.2 host 10.1.1.1 eq 22
  40 permit tcp host 172.16.10.3 host 10.1.1.1 eq 22
  50 permit tcp host 172.16.10.4 host 10.1.1.1 eq 22
  60 deny ip any any

【変更内容】
//以下の3行を1行目と2行目の間に追加して、
//「ip access-list resequence EXAMPLE-ACL 10 10」を実行する。
  permit tcp host 192.168.0.2 host 10.1.1.1 eq 22
  permit tcp host 192.168.0.3 host 10.1.1.1 eq 22
  permit tcp host 192.168.0.4 host 10.1.1.1 eq 22

【変更後コンフィグ】
ip access-list extended EXAMPLE-ACL
  10 permit tcp host 192.168.0.1 host 10.1.1.1 eq 22
  20 permit tcp host 192.168.0.2 host 10.1.1.1 eq 22 //←追加された行
  30 permit tcp host 192.168.0.3 host 10.1.1.1 eq 22 //←追加された行
  40 permit tcp host 192.168.0.4 host 10.1.1.1 eq 22 //←追加された行
  50 permit tcp host 172.16.10.1 host 10.1.1.1 eq 22
  60 permit tcp host 172.16.10.2 host 10.1.1.1 eq 22
  70 permit tcp host 172.16.10.3 host 10.1.1.1 eq 22
  80 permit tcp host 172.16.10.4 host 10.1.1.1 eq 22
  90 deny ip any any

↓↓↓結果↓↓↓
比較結果が見づらい

このように、変更箇所以降の全ての行が差分としてヒットしてしまいます。
今回の例は行数が少ないため、目視で判断できるレベルですが、より行数の多いACLではとても邪魔になると思います。

■WinMergeの比較処理前で、シーケンス番号の差分を無視する

こういうときは、比較処理前プラグイン「PrediffLineFilter(比較前処理置換フィルター)」を使います。
このプラグインを使用して、指定した文字列を無かったことにしてしまえば、対象箇所を無視して比較できます。
シーケンス番号に相当する正規表現を設定してみましょう。

「プラグイン」→「プラグインの設定」を開きます。
「PrediffLineFilter」を選択して、「プラグインの設定」を開きます。
プラグインの設定

「追加」を押して入力欄を追加したら、「有効」「正規表現を使用」にチェックを入れます。
シーケンス番号は「行頭から空白1文字以上、数字1文字以上、空白1文字以上」に相当すると思うので、以下の正規表現を「検索文字列」に入力して、OKを押します。
^\s+\d+\s+
比較前処理置換フィルター

差分の画面に戻ったら、「プラグイン」→「比較前処理プラグイン」→「比較前処理置換フィルター」を有効にします。
すると、シーケンス番号だけが異なる行は薄い色になり、差分として扱われなくなります。
比較前処理置換フィルターを適用

見やすくなりました!