• Publicidad

Expresión regular

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Re: Expresión regular

Notapor situ » 2011-02-19 13:45 @615

El código es el del script que publiqué en el post anterior.

El archivo tiene este contenido:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
!
hostname pepe
!
username dmin password casasasas
username user1 password asdasdasdasdad
!
server name asdsadasda active acceso 31
server name 13212ssss3 active acceso 31
!
acceso 31 permit 2.2.2.0 0.0.0.255
acceso 31 permit 1.1.1.0 0.0.0.255
acceso 31 permit 3.3.3.0 0.0.0.31
acceso 10 deny tcp any any eq 131
acceso 10 deny tcp any any eq 132
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Como te decía solamente me trae el hostname, estaba tratando de sacar el tema del "server name" porque en verdad ese cambio cambia siempre, por eso solamente busco "acceso 31", ya que es algo fijo.

Saludos y muchas gracias.
situ
Perlero nuevo
Perlero nuevo
 
Mensajes: 358
Registrado: 2007-04-09 01:44 @114

Publicidad

Re: Expresión regular

Notapor explorer » 2011-02-19 14:23 @641

He reescrito mi solución en Perl antiguo, a ver si así te funciona.
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. use diagnostics;
  5.  
  6.  
  7. # Leer el fichero y pasarlo a memoria
  8. my $hostname;
  9. my %usuarios;
  10. my %servidores;
  11. my %accesos;
  12.  
  13. open ENTRADA, 'kk.txt' or die;
  14.  
  15. while (<ENTRADA>) {
  16.  
  17.     next if /^!/;
  18.  
  19.     chomp;
  20.  
  21.     if (/^hostname\s+(\w+)/) {
  22.         $hostname = $1;
  23.         next;
  24.     }
  25.  
  26.     if (/^username\s+(\w+)\s+passwd\s+(\w+)/) {
  27.         $usuarios{$1} = $2;
  28.         next;
  29.     }
  30.  
  31.     if (/^server\s+name\s+(\w+)\s+(?:active|desactive)\s+(\w+ \d+)/) {
  32.         $servidores{$1} = $2;
  33.         next;
  34.     }
  35.  
  36.     if (/^(\w+ \d+)\s+(.+)/) {
  37.         push @{$accesos{ $1 }}, $2;     # es un hash que contiene varios arrays
  38.         next;
  39.     }
  40. }
  41.  
  42. close ENTRADA;
  43.  
  44. # Pintamos el resultado
  45. #print "$hostname\n";
  46. while (my($servidor, $acceso) = each %servidores) {             # para cada servidor...
  47.  
  48.     if (exists $accesos{ $acceso }) {                           # si existe el acceso para ese servidor
  49.  
  50. #        print "Lista de accesos para el servidor $servidor:\n";
  51.  
  52.         for my $descripcion (@{$accesos{$acceso}}) {
  53.             my($IP) = $descripcion =~ /(?:permit|deny) ([0-9.]+|.+)/;
  54.             print "$acceso ", $IP, "\n";
  55.         }
  56.     }
  57.     else {
  58. #        print "El servidor $servidor no tiene accesos.\n";
  59.     }
  60. }
  61.  
  62. __END__
  63. acceso 31 2.2.2.0
  64. acceso 31 1.1.1.0
  65. acceso 31 3.3.3.0
  66. acceso 31 2.2.2.0
  67. acceso 31 1.1.1.0
  68. acceso 31 3.3.3.0
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Expresión regular

Notapor situ » 2011-02-20 00:45 @073

Discúlpame, pero ¿cómo debo de hacer para imprimir solamente lo siguiente?
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
acceso 31 2.2.2.0
acceso 31 1.1.1.0
acceso 31 3.3.3.0
acceso 31 2.2.2.0
acceso 31 1.1.1.0
acceso 31 3.3.3.0
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Intenté, pero no puedo lograrlo. Por este motivo te molesto nuevamente.

Saludos.
situ
Perlero nuevo
Perlero nuevo
 
Mensajes: 358
Registrado: 2007-04-09 01:44 @114

Re: Expresión regular

Notapor explorer » 2011-02-20 07:41 @361

Código cambiado.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Expresión regular

Notapor situ » 2011-02-20 10:33 @481

Como siempre un lujo pertenecer al foro =) Muchas gracias. Anda perfecto.
Saludos.
situ
Perlero nuevo
Perlero nuevo
 
Mensajes: 358
Registrado: 2007-04-09 01:44 @114

Re: Expresión regular

Notapor situ » 2011-02-21 11:24 @517

Al final lo hice de otra forma porque me resultaba más fácil, pero quería consultarte algo ya que ahora la salida la tengo duplicada porque en verdad está dos veces el acceso 31, el cual está bien que figure así pero me gustaría que el resultado no sea duplicado.

1. Busco el acceso que me interesa:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. elsif($resultado =~ m/^snmp\sname.*(acceso\s[0-9|\.]*)\s/) {
  2.  push (@accesslist,$1);
  3.         next;
  4. }
  5.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


2. Guardo todos los accesos del archivo, ya que no siempre esta el 31 solo.
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.  elsif ($resultado =~ m/^(acceso\s[0-9|\.].*)/) {
  2.         push (@accesos,$1);
  3.         next;
  4.     }
  5.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


3. Comparo
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. foreach $accesos(@accesos) {
  2.                 foreach $accesslist(@accesslist) {
  3.                 if($accesos =~ m/^$accesslist\spermit\s(.*)/) {
  4.                print "$1\n";
  5.  }
  6.                  }
  7. }
  8.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


resultado:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
2.2.2.0
1.1.1.0
3.3.3.0
2.2.2.0
1.1.1.0
3.3.3.0
 
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Capaz no es el mejor script pero fue la forma que me resulto más fácil de realizar las búsquedas.
situ
Perlero nuevo
Perlero nuevo
 
Mensajes: 358
Registrado: 2007-04-09 01:44 @114

Re: Expresión regular

Notapor explorer » 2011-02-21 11:37 @525

Claro... es que eso de guardar información en arrays y luego recorrerlos para recuperar esa información, es lo que hacen los hash, pero siendo un tipo base de Perl, mucho más rápido.

Debes aprender a manejar hash.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Expresión regular

Notapor situ » 2011-02-21 11:41 @529

Okas, muchas gracias, voy a probar con hash.
situ
Perlero nuevo
Perlero nuevo
 
Mensajes: 358
Registrado: 2007-04-09 01:44 @114

Anterior

Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 19 invitados