sábado, enero 14, 2012

Perl, buscar texto dentro de ficheros


Utilizaremos las variables especiales $ARG y $ARGV.

Queremos pasarle como argumentos a nuestro programa el nombre de varios ficheros de texto, y él nos dirá si encuentra el texto en alguno de ellos.


use English;
while(<>){
if($ARG=~/texto de prueba/){
print " Encontrado\n $ARG\n en $ARGV\n\n\n";
}
}

Para que nos reconozca correctamente los términos $ARG y $ARGV tenemos que indicar el "use English". Es para poder usar el módulo English.pm.

$ARG es la entrada y patrón de búsqueda por defecto. En el sitio dónde lo hemos puesto va cogiendo el nombre de cada argumento que le hemos pasado de esta forma:
$buscar.pl fichero1 fichero2 fichero3

$ARGV contiene el nombre del fichero actual que está tratando el bucle.

El bucle recorrerá todos los ficheros que pasemos como argumento. En la IF preguntamos si el fichero cumple la condición de tener ese texto dentro (patrón). Si lo tiene indicamos lo que ha encontrado, y también en qué fichero lo ha hecho.

La ejecución:

$ perl buscar.pl fichero1 fichero2 fichero3
Encontrado
texto de prueba
en fichero2

Saludos.

2 comentarios:

Anónimo dijo...

Buenas.

No comprendo el ejemplo. Además la libreria English.pm ¿que código contiene?

No se vé la relación. ¿$ARG que contiene?

Un saludo.

Aitor Iriarte dijo...

Hola,

El módulo English permite que podamos utilizar algunos Alias como $ARG, @ARG, etc. etc. El utilizar esos Alias en lugar de los nombres de variables reales hacen el programa más legible.

En el Script de ejemplo hay un bucle WHILE. $ARG va cogiendo cada uno de los parametros que le hemos pasado al programa en ese bucle.

$ARGV también está cogiendo valores diferentes dentro de ese bucle. Esta variable indica cual es el fichero actual que está tratando.

Saludos,