2.1. Modelos básicos. Mediante modelos de caracteres podemos explorar archivos y visualizar las ocurrencias de un determinado modelo. Los modelos se expresan
escribiéndolos entre dos barras: /expresión/ Ejemplo: Del archivo SALUDO.TXT queremos visualizar las líneas que contengan la palabra "Hola". Teclear: C:\>PERL -ne "print if /Hola/;" saludo.txt Resultado: Hola, Mundo... Ejemplo: Del archivo SALUDO.TXT queremos visualizar las líneas que contengan al menos un punto. Teclear: C:\>perl -ne "print if /./;" saludo.txt Resultado: Hola, Mundo... Otros ejemplos: el fichero AVERIAS.TXT nos servirá para utilizar nuevas formas de búsqueda y conocer parte de la potencia de Perl en este tema: 30-12-98 12:00 Antonio
López OKI SGE No enciende aloki - Extraer las averías de SGE y de SGT. C:\perl>perl -ne "print if /SG./;" averias.txt El punto que está después de la G actúa como un comodín Es más lógico poner /SG/ para los datos existentes. - Extraer las averías de Luis López. C:\perl>perl -ne "print if /Luis López/;" averias.txt - Extraer todas las averias de la marca HP. C:\perl>perl -ne "print if /HP/;" averias.txt - Extraer todas las averias en que hubo atasco. C:\perl>perl -ne "print if /ATASC/;" averias.txt -Usando más comodines: . = cualquiera excepto el carácter
de línea nueva. Si anteponemos \ (barra invertida) a cualquier comodín nos referimos al carácter en concreto. - Extraer todas las averías con una o más F. C:\perl>perl -ne "print if /F+/;" averias.txt Si prueba con f (minúscula) el resultado es distinto. - Extraer todas las averías de los hermanos Luis y Luisa López. C:\perl>perl -ne "print if /Luisa*/;" averias.txt - Extraer todas las averías del día 30-12-98. C:\perl>perl -ne "print if /30-12/;" averias.txt - Extraer todas las averías con primera letra del nombre M y final de apellido z. C:\perl>perl -ne "print if /M.*z/;" averias.txt (En realidad busca todo lo que empiece por M seguido de uno o más caracteres y con una z como carácter final de la cadena). - Extraer todas las averías que finalicen en hp. C:\perl>perl -ne "print if /hp$/;" averias.txt - Extraer todas las averías que se dieron los días 30 y 31 de diciembre. C:\perl>perl -ne "print if /^3.-12/;" averias.txt 2.2. Modelos avanzados. 2.2.1. Modelo {Min, Max}. Se usa para buscar expresiones que se repiten. Ejemplos: /N.{1,3}d.*/ # Navidad,
Navideño, Nada, Nudo (entre 1 y 3) 2.2.2. Modelo de clase [aeiou]. Se usa para establecer un rango de caracteres permitidos. /bar.[aeiou].*/ # barca,
barquero, barcelonés, bares, abarcar 2.2.3. Modelo de alternativa / | /. Se usa para indicar opciones alternativas en un módelo de búsqueda. /No fu|Si ca/ # No fumo,
Si canto, No futbol, Si carros 2.2.4. Carácteres especiales para modelos. ^ El modelo comienza al principio
de la cadena. Ejemplos: /^\d+\t/; # comienzo de
cadena por uno o más digitos seguidos de tab. 2.2.5. Otros modelos útiles. 2.2.5.1. Modelo =~. Cambia el objetivo de búsqueda para un modelo. Ejemplo (cambobje.pl): # Cambio de objetivos $_="El cielo es
azul"; $objetivo0 = $_; 2.2.5.2. Modelo //i. Ignora diferencia de mayúsculas y minúsculas. /menú/ # menú y nada más /menú/i # Menú, MENÚ, mENú, menú 2.2.5.3. Modelo s///. Busca y reemplaza la primera expresión encontrada de una cadena. Ejemplo (buscmode.pl): $_="los coches son
blancos y blancos"; $_="ahh..ahh..chuss...
¡lo siento!"; 2.2.5.4. Modelo s///g. Busca y reemplaza toda las expresiones en una cadena. $_="Navidad, Navidad,
dulce Navidad"; 2.2.5.5. Modelo tr///. Intercambia caracteres según la correspondencia de un patrón. Ejemplo (traslaci.pl): $_="ten cuidado con
la carretera"; $_="libros+de+ciencia";
$_="codigo secreto:
0013273"; 2.2.5.6. Modelo (Subexpresión) $1 $2... Se usa para buscar subexpresiones repetidas y permite acortar la escritura de los modelos. /(expresión1) (expresión2...) $1 $2/; /Tengo una y(ama) que y$1
se y$1/; #Tengo una yama que yama se llama Ejemplo usando búsqueda y sustitución (expres.pl): # Subexpresión usada para buscar y reemplazar en una cadena: $_="nombre edad lugar
"; 2.2.5.7. Modelo s///e. Evalua expresiones y funciones Perl que forman parte de un modelo de búsqueda. $_ = "banana"; s/an/1+2/e; print; #Imprime: b3ana $_ = "banana"; s/an/1+2/eg; #Imprime: b33a (la 'g' hace una sustitución global) $_ = "banana"; s/a/pack("C", hex(41))/eg #Imprime: bAnAnA |