2013-12-12 2 views
0

Интересно, может ли perl выполнить синтаксический разбор конфигурации junos и преобразовать в csv.perl parsing configuration braces style

interfaces { 
    apply-groups policer-arp; 
    ge-1/0/0 { 
     description "*** Description ***"; 
     unit 0 { 
      family inet { 
       address 10.100.200.1/24 { 
        arp 10.100.200.2 mac 00:16:d4:e7:9b:de; 
       } 
      } 
     } 
    } 
    ge-1/0/2 { 
     description " Description "; 
     vlan-tagging; 
     unit 101 { 
      description "NODEB_CLUSTER#101"; 
      vlan-id 101; 
      family inet { 
       address 10.187.132.3/27 { 
        vrrp-group 1 { 
         virtual-address 10.187.132.1; 
         priority 190; 
         accept-data; 
        } 
       } 
      } 
     } 
     unit 102 { 
      description "Description"; 
      vlan-id 102; 
      family inet { 
       address 10.187.132.35/27 { 
        vrrp-group 2 { 
         virtual-address 10.187.132.33; 
         priority 200; 
         accept-data; 
        } 
       } 
      } 
     } 
     unit 103 { 
      description "NODEB_CLUSTER#103"; 
      vlan-id 103; 
      family inet { 
       address 10.187.132.67/27 { 
        vrrp-group 3 { 
         virtual-address 10.187.132.65; 
         priority 190; 
         accept-data; 
        } 
       } 
      } 
     } 
     unit 104 { 
      description "NODEB_CLUSTER#104"; 
      vlan-id 104; 
      family inet { 
       address 10.187.132.99/27 { 
        vrrp-group 4 { 
         virtual-address 10.187.132.97; 
         priority 200; 
         accept-data; 
        } 
       } 
      } 
     } 

Выход:

Interface, IP Address, VLAN, Virtual-Address, Vrrp-group, Vrrp Priority 
ge-1/0/0,10.100.200.1/24, , , , ,    
ge-1/0/2, , , , , , 
ge-1/0/2.101,10.187.132.3/27,101,10.187.132.1,1,190 
ge-1/0/2,102,10.187.132.35/27,102,10.187.132.33,2,200 
ge-1/0/2,103,10.187.132.67/27,103,10.187.132.65,3,190 
ge-1/0/2,104,10.187.132.99/27,104,10.187.132.97,4,200 

Так вкратце, мы преобразуем Junos конфигурации в файл CSV для конфигурации интерфейса мы отсчитываем интерфейс GE-1/0/2, чем GE-1/0/2.101 как это интерфейс для vlan 101, ge-1/0/2.102 для vlan 102 и так далее. Может ли perl анализировать его или есть более быстрые способы его преобразования?

+2

Perl (или любой другой язык программирования) может сделать это. Что вы пробовали? – choroba

+0

Я пробовал сначала прочитать ввод, а затем grep с if ($ _ = ~ //). Но трудно получить значение, когда в конфиге есть дублирующее значение. Я задаюсь вопросом, есть ли более быстрые пути? – rabka

ответ

2

Это не должно быть очень сложно, если вы знаете грамматику для этой конфигурации. С комбинацией регулярных выражений (с использованием g и c модификаторы и \ G утверждение) и функция pos(). Хорошим примером является JSON::Tiny.

я добавил пример парсер для этого формата (однако не знаю, это правильно, потому что тема стартер не может предоставить спецификации): https://gist.github.com/olegwtf/7941326

+0

Я все еще путаю использование JSON для древовидного, не могли бы вы привести пример для этого случая? – rabka

+0

Имеет ли этот формат грамматики формата конфигурации, например JSON, https://tools.ietf.org/html/rfc4627? –

+0

Кажется, нет. Точно так же, как дерево без объекта, только значение/параметр. – rabka

Смежные вопросы