• Publicidad

Imprimir líneas entre expresiones regulares

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

Imprimir líneas entre expresiones regulares

Notapor roxana_ » 2010-11-16 20:50 @910

Quiero imprimir las líneas de un archivo que están entre dos expresiones regulares. Por ejemplo, desde que encuentra "Q3UEX0_MOUSE" hasta el símbolo ">". La primera expresión sólo se encuentra una vez en el archivo.

Intenté, sin éxito, varias posibilidades, les muestro una de ellas.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
foreach $linea (<ARCHIVO>)
        {
          if ($linea=~ /Q3UEX0_MOUSE/)
          { do
           { print $linea;
             next;      }
           until ($linea !~ />/);
         }
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Creo que aquí el problema está en el recorrido. Agradezco cualquier sugerencia.
roxana_
Perlero nuevo
Perlero nuevo
 
Mensajes: 14
Registrado: 2010-11-04 15:18 @679

Publicidad

Re: Imprimir líneas entre expresiones regulares

Notapor explorer » 2010-11-17 04:31 @229

Puedes usar el operador rango, pero aplicado a expresiones regulares:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
while (<ARCHIVO>) {
    if ( /Q3UEX0_MOUSE/ .. />/ ) {
        print $_;
    }
}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Más información en perldoc perlop.
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: Imprimir líneas entre expresiones regulares

Notapor roxana_ » 2010-11-17 05:11 @257

Gracias por la pronta respuesta, olvidé aclarar que quiero la línea donde encuentra la primera expresión que busco, pero no la línea que contenga la segunda.

La salida del código anterior es:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
>Q3UEX0_MOUSE/65-317
--------------------------------------------------
------------------T-NG-L-VL----A----A---T--M--R--F
-----K------K--LR-------------------HP-L---N-W----
I---L-V-N----L----A-V-AD-L---A----E-T--I----------
>B3SAE0_TRIAD/84-341
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


La salida deseada es:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
>Q3UEX0_MOUSE/65-317
--------------------------------------------------
------------------T-NG-L-VL----A----A---T--M--R--F
-----K------K--LR-------------------HP-L---N-W----
I---L-V-N----L----A-V-AD-L---A----E-T--I----------
 
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

¿Alguna sugerencia?
roxana_
Perlero nuevo
Perlero nuevo
 
Mensajes: 14
Registrado: 2010-11-04 15:18 @679

Re: Imprimir líneas entre expresiones regulares

Notapor explorer » 2010-11-17 05:49 @284

Para descartar la última línea, debemos saber si hemos llegado a la última línea del rango. El operador rango devuelve, en ese caso, un valor que contiene la letra 'E', por lo que nos sirve como semáforo.
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
while (<ARCHIVO>) {
    if ( $linea_en_rango = /^Q3UEX0_MOUSE/ ... /^>/ ) { # si estamos en el rango,
        print $_ if $linea_en_rango !~ /E/;             # Imprimir si no es la última
    }
}
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: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Imprimir líneas entre expresiones regulares

Notapor roxana_ » 2010-11-17 08:18 @387

Muchas gracias, ha sido muy claro y de gran ayuda. Como voy a seguir trabajando con el script probablemente vuelva a preguntar al respecto. Gracias :)
roxana_
Perlero nuevo
Perlero nuevo
 
Mensajes: 14
Registrado: 2010-11-04 15:18 @679


Volver a Básico

¿Quién está conectado?

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