[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