[GTER] Expressões regulares Cisco / Quagga

Rinaldo Vaz rinaldo at anid.com.br
Fri Jul 20 12:28:54 -03 2012


Bom dia à todos,


Estou com dúvidas com relação ao uso de chaves "{ }" nas expressões
regulares especificamente no IOS Cisco.

As chaves ajudam a diminuir o as repetições de certas "palavras", por
exemplo:


Para enviar um parcial routing para um cliente eu poderia utilizar as
seguintes expressões:

Enviar rotas com 1 AS no path: (essa é fácil)

router(config)# ip as-path access-list 1 permit ^([0-9]+)$

Essa expressão é incompleta, por não anunciaria prefixos originados no meu
AS, e eu preciso fazer mais uma me deixando com 2 regras...

router(config)# ip as-path access-list 1 permit ^([0-9]+)$
router(config)# ip as-path access-list 1 permit ^$

Para aumentar para até 2 AS's eu coloco mais uma...

router(config)# ip as-path access-list 1 permit ^([0-9]+ [0-9+)$
router(config)# ip as-path access-list 1 permit ^([0-9]+)$
router(config)# ip as-path access-list 1 permit ^$


Adicionar 3 regras seja um problema, mas é um problema se eu quiser
"visualizar" em um comando só, nesse caso fica um tanto tosco dar 3
comandos diferentes. Felizmente há a opção de concatenar com o PIPE...

router#sh ip bgp regexp ^([0-9]+ [0-9]+)$|^([0-9]+)$|^$

Dessa forma consigo ver tudo e ao mesmo tempo criar uma regra que "vale por
3"
Porém ainda posso simplificar mais...

de    ^([0-9]+ [0-9]+)$|^([0-9]+)$|^$
para ^(([0-9]+ [0-9]+)|([0-9]+)|())$

Evidentemente ainda dá para melhorar, trocando a expressão "qualquer
número" [0-9]+" por "qualquer coisa q nao seja em branco" "[^ ]", logo
simplifico mais ainda...

de    ^([0-9]+ [0-9]+)$|^([0-9]+)$|^$
para ^(([^ ]+ [^ ]+)|([^ ]+)|())$

Mesmo ficando pouco intuitivo, tivemos uma boa redução na quantidade de
caracteres e a quantidade de regras... (apenas 1)

router(config)# ip as-path access-list 1 permit ^(([^ ]+ [^ ]+)|([^ ]+)|())$

Esse o ponto que eu queria chegar é a dificuldade de escalar, imagine a
mesma necessidade para 3 AS's e para 4...

para 3 => ^(([^ ]+)|([^ ]+ [^ ]+)|([^ ]+ [^ ]+ [^ ]+)|())$
para 4 => ^(([^ ]+)|([^ ]+ [^ ]+)|([^ ]+ [^ ]+ [^ ])|([^ ]+ [^ ]+ [^ ]+ [^
]+)|())$

Essa expressão para "4" é impossível de digitar com pressa ;-)

Então as chaves ajudam a eliminar as repetições inserindo um intervalo de
repetições dentro das chaves {}...

Consigo diminuir:
de    ^(([^ ]+)|([^ ]+ [^ ]+)|([^ ]+ [^ ]+ [^ ])|([^ ]+ [^ ]+ [^ ]+ [^ ]+)|
())$
para ^([^ ]+_){0,4}$

Ou seja, a palavra ([^ ]+_) à esquerda de {0,4} pode se repetir 0 vezes, 1
vez, 2 vezes, 3 vezes ou 4 vezes.



O problema é que na interface Cisco IOS as chaves simplesmente não funcionam


Minhas dúvidas são:

1- Versões mais antigas do IOS não dão suporte às chaves {}?

2- A partir de que versão do IOS posso utilizar {} ?

3 - Como vocês tem se virado sem o suporte às {} ?


PS: No quagga funciona 100%.


Abs,


-- 


Rinaldo Vaz
Chefe de operações do NOC
Associação Nacional para Inclusão Digital
Tim - 083 99975736
INOC - 28135*100



More information about the gter mailing list