Expressões regulares (ou RegExP) são muito comuns na ciência da computação, mas o que poucos sabem é que o uso das expressões regulares são possíveis, e comuns, no CLI da Cisco. Nesse artigo daremos uma introdução sobre o uso das expressões regulares no Cisco IOS e alguns exemplos de uso.
De forma simples podemos dizer que uma expressão regular é uma forma concisa e flexível de identificar cadeias de caracteres, caracteres particulares, palavras ou padrões de caracteres. As expressões regulares, também chamadas de RegExP, são amplamente utilizadas em linguagens de programação, ferramentas de buscas e na computação de maneira geral.
No Cisco IOS uma expressão regular entra como parte de um comando, seja comando de configuração ou nos comandos “show”. Para construirmos uma expressão regular utilizamos alguns símbolos especiais que veremos a seguir. Vale ressaltar que dependendo da aplicação alguns símbolos podem não ser suportados. Quando uma string corresponde com a expressão regular dizemos que “deu match”, ou seja, deu correspondência. As expressões regulares podem ser construídas para dar correspondência ou para não dar correspondência. Mais adiante veremos alguns exemplos para deixar as coisas mais claras, mas antes temos que aprender os símbolos utilizados para a construção das expressões regulares.
^
Indica o início da string.
^123, dá match com 1234, mas não com 01234
$
Indica o final da string
123$, dá match 6123 mas não com 61239
.
Qualquer caractere.
Por exemplo, a.b dá match com a3b, aab, arb e não dá match com a3c, as2…
*
Zero ou mais vezes o caractere antecedente.
14* dá match com 1, 14, 144, 1444 …
+
Uma ou mais vezes o caractere antecedente.
14+ dá match com 14, 144, 1444 mas não dá match com 1 sozinho, pois o 4 precisa aparecer pelo menos uma vez após o 1.
?
Zero ou uma vez o caractere antecedente.
Por exemplo, ba?b dá match bb e bab.
\
Escape de caractere. Algumas vezes você vai querer buscar por uma string que contenha um dos símbolos utilizados para construir expressões regulares, nesse caso esse símbolo precisa ser “escapado”. Ou seja, é uma forma de dizer à expressão regular que o caractere seguinte deve ser tratado como uma string e não como um operador da expressão.Por exemplo, queremos buscar pela string “192.1”, nesse caso precisamos escapar o “.” para que a expressão regular não “pense” que o “.” é um operador que indica qualquer caractere. Nesse caso a expressão regular deve ser construída na forma 192\.1
[]
Forma uma lista ou intervalo de caracteres
[abc0-4], dá match com a, b, c e com os números de 0 a 4, mas não dá match com d, 5, 6 etc…
Detalhe: quando dentro de um colchetes temos o símbolo ^, ele tem o significado de negação e não de início de string. Dessa forma a expressão [^abc] significa que queremos dar match em qualquer letra que não seja o a, b ou c. Perceba que é diferente do significado da expressão ^abc sem colchetes, pois o ^abc irá dar match na string que começar com abc.
–
Utilizado para especificar o intervalo com o uso dos colchetes, conforme vimos acima.
()
Forma um agrupamento lógico.
(23)+ dá match com qualquer string que contenha 23, repetido uma ou mais vezes. Por exemplo, dá match com 52345, 43223234….
|
Concatenação. Funciona com um OR lógico e indica que deve procurar correspondência com ambos os padrões.
(x|y) vai dar match com x OU com y
Esse é o básico sobre expressões regulares, existem maneiras mais complexas de construirmos nossas expressões regulares, mas para começarmos já está de bom tamanho. Em um próximo artigo falaremos de outros operadores que podemos utilizar.
Bom, agora que já sabemos o básico vamos ver alguns exemplos simples de onde podemos utilizar as expressões regulares. Como comentamos anteriormente as expressões regulares entram como parte de um comando, como por exemplo o comando “show”. Acompanhe os exemplos abaixo.
- Comando show para mostrar as linhas da configuração que iniciam com a string “aaa”:
DlteC-FW-GW#sh run | include ^aaa
aaa new-model
aaa authentication login default local enable
aaa authentication login ciscocp_vpn_xauth_ml_1 local
aaa authentication login ciscocp_vpn_xauth_ml_2 local
aaa authorization network ciscocp_vpn_group_ml_1 local
aaa authorization network ciscocp_vpn_group_ml_2 local
aaa session-id common
DlteC-FW-GW#Perceba que utilizamos o operador ^ que indica o início da string.
- Comando show para mostrar as linhas de configuração que contenham os endereços IP cujo os 2 últimos octetos são .2.1
DlteC-FW-GW#sh run | include \.2\.1[^0-9]
ip dhcp excluded-address 192.168.2.1 192.168.2.19
default-router 192.168.2.1
option 150 ip 192.168.2.1
ip address 192.168.2.1 255.255.255.0
DlteC-FW-GW#Aqui perceba que tivemos que escapar o “.” na forma “\.”. Isso porque se não escaparmos o “.” o IOS irá entender que o “.” é o operador que indica qualquer coisa, ou seja, ele irá procurar por string que tenham “qualquer coisa”2″qualquer coisa”1. E não é o que queremos, por isso utilizamos o escape informando que o ponto deve ser tratado como uma string.
Atente também que no final colocamos [^0-9]. Isso para evitar de vir os endereços IP que terminem no formato .2.10 ou .2.11 ou .2.100 e por aí vai…
- Comando show ip interface brief mas mostrando apenas as interfaces 11-15.
Aqui temos que ficar atento a como construiremos a expressão. Num primeiro momento os mais apressados vão dizer que a expressão seria [11-15], mas veja o que acontece se colocarmos nesse formato.
SW-DlteC#sh ip int bri | incl [11-15]
Vlan1 unassigned YES NVRAM up up
Vlan10 192.168.1.5 YES NVRAM up up
FastEthernet0/1 unassigned YES unset up up
FastEthernet0/5 unassigned YES unset down down
FastEthernet0/10 unassigned YES unset down down
FastEthernet0/11 unassigned YES unset down down
FastEthernet0/12 unassigned YES unset down down
FastEthernet0/13 unassigned YES unset down down
FastEthernet0/14 unassigned YES unset down down
FastEthernet0/15 unassigned YES unset down down
FastEthernet0/16 unassigned YES unset down down
FastEthernet0/17 unassigned YES unset down down
FastEthernet0/18 unassigned YES unset down down
FastEthernet0/19 unassigned YES unset down down
FastEthernet0/21 unassigned YES unset down down
GigabitEthernet0/1 unassigned YES unset up upPerceba que também veio informações das interfaces 0/1, 0/5, 0/21…Isso porque a expressão foi construida no formato errado. A forma correta seria 1[1-5], ou seja, queremos um 1 seguido de um 1,2,3,4 ou 5. Acompanhe abaixo.
SW-DlteC#sh ip int bri | incl 1[1-5]
FastEthernet0/11 unassigned YES unset down down
FastEthernet0/12 unassigned YES unset down down
FastEthernet0/13 unassigned YES unset down down
FastEthernet0/14 unassigned YES unset down down
FastEthernet0/15 unassigned YES unset down down
SW-DlteC#
Além dos comandos show as expressões regulares são utilizadas em alguns comandos de configuração também. Quem trabalha com a plataforma VoIP da Cisco muitas vezes utiliza expressões regulares e acaba não ligando o nome a pessoa, ou seja, utiliza e nem se liga que utiliza. Por exemplo, na configuração de dial-peers é comum utilizarmos expressões regulares. Veja o exemplo abaixo.
dial-peer voice 1040 pots
destination-pattern 0[0][^0]…[2-6]…….$
Perceba que aqui estamos criando um dial-peer que irá dar match nos números discados que estejam exatamente no formato 0[0][^0]…[2-6]…….$. Vamos entender como ler essa expressão.
Logo, podemos perceber que esse dial-peer será utilizado quando os usuários discarem um número DDD, com o código da operadora e para telefone fixo.
Bom pessoal, o tema é extenso e aqui tivemos como objetivo apenas dar uma introdução ao uso de expressões regulares no IOS Cisco. Em artigos posteriores poderemos entrar em mais detalhes e verificar formas mais avançadas de construirmos expressões regulares.
Venha conhecer nossos Cursos preparatórios para certificações Cisco e tenha muito mais recursos para trabalhar com o Cisco IOS.
Cursos online, baixo custo, material atualizado, simulados, tutoria especializada e muito mais. Venha aprender redes, Cisco e muito mais com a DlteC do Brasil.
E se você deseja aprender mais sobre expressões regulares uma boa dica são os nossos cursos de Linux, pois o tema expressão regular faz parte da certificação Linux LPI.
One Response
Muito interessante.