[SP-pm] Ajuda expressão regular
Vitor Serra Mori
vsmori em molden.com.br
Segunda Julho 31 06:53:15 PDT 2006
Jorge,
Ai vai :
----------------------------------------------------------------------
my @arr; # Array com as linhas do arquivo
my $d1; # Dado 1
my $d2; # Dado 2
open FH, 'a.txt'; # Abre arquivo e carrega linhas em @arr
@arr = <FH>;
close FH;
for (@arr) { # Loop para extrair dados
$_ =~ /ifDescr\.(\d+).*STRING:(.*)/;
($d1,$d2) = ($1,$2);
$d1 =~ s/[Shelf|on|Slot]//g;
printf "%s %s\n",$d1,$d2;
}
----------------------------------------------------------------------
Gerou o seguinte resultado :
837 Ethernet Shelf 1/9/1
838 Gigabit Ethernet 1/9/4
839 Loopback on shelf 1 slot 9
840 Reject on shelf 1 slot 9
841 Black Hole on shelf 1 slot 9
842 Inactive on shelf 1 slot 9
843 Local on shelf 1 slot 9
844 Multi Cast on shelf 1 slot 9
845 Console Port 1/9/2
846 VRouter: main
847 Stinger ATM Int Slot 1/9/3
É claro que o método para ler o arquivo não é o mais indicado ... Mas para o
próprosito de gerar a solução rapidamente funciona ....
Abraços,
Vitor
-----Original Message-----
From: saopaulo-pm-bounces+vsmori=molden.com.br em pm.org
[mailto:saopaulo-pm-bounces+vsmori=molden.com.br em pm.org] On Behalf Of Jorge
Teles
Sent: segunda-feira, 31 de julho de 2006 10:05
To: saopaulo-pm em mail.pm.org
Subject: Ajuda expressão regular
Olá pessoal,
estou tentando fazer há alguns dias uma expressão regular com os dados
abaixo, e querendo obter os seguintes dados:
- O números depois de "ifDescr.";
- As strings depois de "STRING:", excluindo a string
Shelf|on|Slot;
IF-MIB::ifDescr.837 = STRING: Ethernet Shelf 1/9/1
IF-MIB::ifDescr.838 = STRING: Gigabit Ethernet 1/9/4
IF-MIB::ifDescr.839 = STRING: Loopback on shelf 1 slot
9
IF-MIB::ifDescr.840 = STRING: Reject on shelf 1 slot 9
IF-MIB::ifDescr.841 = STRING: Black Hole on shelf 1 slot 9
IF-MIB::ifDescr.842 = STRING: Inactive on shelf 1 slot
9
IF-MIB::ifDescr.843 = STRING: Local on shelf 1 slot 9
IF-MIB::ifDescr.844 = STRING: Multi Cast on shelf 1 slot 9
IF-MIB::ifDescr.845 = STRING: Console Port 1/9/2
IF-MIB::ifDescr.846 = STRING: VRouter: main
IF-MIB::ifDescr.847 = STRING: Stinger ATM Int Slot
1/9/3
A expressão que tenho é a seguinte:
.*?\.(\d+)\s.*?\:\s(\w+\s?\w+)
Essa expressão me traz para a primeira linha:
"Ethernet Shelf", tendo eu depois que substituir Shelf por nada, mas o
problema maior é o da última linha, pois preciso da palavra "Int" junto com
a string "Stinger ATM", ou seja preciso de "Stinger ATM Int".
Quando tento então adicionar mais comandos a minha expressão regular, acabo
pegando os números no final da linha, por exemplo "1/9/1".
Minha pergunta é: Posso e como fazer condições dentro da expressão regular?
Alguem teria alguma referência para pesquisar?
Jorge Teles
__________________________________________________
Do You Yahoo!?
Tired of spam? Yahoo! Mail has the best spam protection around
http://mail.yahoo.com _______________________________________________
SaoPaulo-pm mailing list
SaoPaulo-pm em pm.org
http://mail.pm.org/mailman/listinfo/saopaulo-pm
Mais detalhes sobre a lista de discussão SaoPaulo-pm