• Publicidad

Eliminar primera línea config por telnet

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

Eliminar primera línea config por telnet

Notapor SJG3226X » 2018-01-29 11:11 @508

Buenas.

Estoy haciendo un script para conectarme a un enrutador, por telnet, hacer un show running y descargarme la configuración en local.

Con todos los equipos funciona bien, pero tengo unos enrutadores un poco especiales que al traerme la configuración, parece que el equipo mete en la cabecera de la misma caracteres no UTF8 y queda raro. Esto es lo que veo:

cabecera.jpg
Cabecera Resultado
cabecera.jpg (59.43 KiB) Visto 962 veces


Esta es la parte del script donde he intentado meter todo tipo de expresiones regulares para intentar que no guarde la primera línea que va desde el principio hasta la línea que empieza por "; J977...."

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. [.....]
  2. $telnet->print("screen-lenght 1000");
  3. $telnet->print("page");
  4. $telnet->print("show running config");
  5. while (my $line = $telnet->getline())
  6. {
  7. if($line !~/Running configuration:|^\s*$/)
  8. {
  9. $line = ~s/\s+$//g;
  10. push @config, $line;
  11. push @config, "\n";
  12. }
  13. [.....]
  14.  
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


¿Alguien sabe cómo quedarme con toda la configuración menos la primera línea?
SJG3226X
Perlero nuevo
Perlero nuevo
 
Mensajes: 4
Registrado: 2015-11-20 04:26 @226

Publicidad

Re: Eliminar primera línea config por telnet

Notapor explorer » 2018-01-29 11:38 @526

No son caracteres extraños. Son secuencias de caracteres ANSI para colocar el cursor y colorear la salida. Normalmente estos caracteres los interpretará la terminal, pero si capturas toda la salida del comando, pues los recibes tú.

Hay varias formas de solucionarlo.

La primera, y más sencilla, sería ver si el enrutador tiene algún comando por el que le podemos indicar que "nuestra consola" no es capaz de interpretar esos caracteres, para que así no los envíe.

Otra opción podría ser identificar algún texto de entre las secuencias de escape, como puede ser show runningl, pero no queda claro si ese texto es el que hemos enviado o es que nos lo envían de nuevo, como cabecera.

Otra opción sería descartar todo lo que llegue hasta que aparezca la primera línea con un carácter ';'.

Sería algo así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $en_cabecera = 1;                            # empezamos estando en la cabecera
  2. while (my $line = $telnet->getline()) {
  3.     chomp $line;                                # quitamos fin de línea
  4.  
  5.     if ($en_cabecera and $line =~ /^[;]/) {     # si estamos $en_cabecera y la $line comienza por un ';'
  6.         $en_cabecera = 0;                       # ya no estamos $en_cabecera
  7.     }
  8.     next if $en_cabecera;                       # si aún estamos $en_cabecera, saltamos a la línea siguiente.
  9.  
  10.     # ... procesar $line
  11. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Ahora bien... si estás completamente convencido de que se trata de solo la primera línea y siempre hay una primera línea... entonces la siguiente solución también te puede valer:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $line = $telnet->getline();                  # leemos la cabecera... y no hacemos nada con ella
  2. while ($line = $telnet->getline()) {            # procesamos el resto de líneas
Coloreado en 0.001 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: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Básico

¿Quién está conectado?

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

cron