viernes, 16 de noviembre de 2012

Manejo de archivos de texto con Perl

Algunas veces necesitamos abrir archivos con perl desde Unix o sistemas Windows,mas que nada yo en Unix,y esto lo podemos hacer de muy buena manera usando el comando open y un filehandle, después de ahí ya podremos partir para lo que queramos usarlo.

En perl podemos hacer las cosas de muchas maneras y les voy a mostrar algunas funcionalidades que le podemos dar a open.

Primero que nada esta es la sintaxis que se usa:

open(filehandle, "Archivo" )

Que es filehandle???

Indicador exclusivo asignado a un fichero que permite dirigirse hacia él

Osea que le vamos a dar un indicador a nuestro archivo para poder usarlo en el script


Bien vamos a inicar con los ejemplos

Abran una terminal

Y escriban

echo "Esta es una prueba de perl hecha por tiempo de tux" >> tiemtux.txt
Eso que hicimos fue crear un archivo llamado tiemtux.txt y que contiene:

Esta es una prueba de perl hecha por tiempo de tux
Ahora creamos un script en perl para abrir el archivo


vim abrir-prueba.pl
Y escribimos

#!/usr/bin/env perl


use strict;
use warnings;
use utf8;

open (PRUEBA, "tiemtux.txt");

while (<PRUEBA>) {

chomp;

print "$_\n";

}

Después ejecuten

perl abrir-prueba.pl

y vean el resultado




Lo explico:

#!/usr/bin/env perl

Es el hashbang o shebang

use strict;        use warnings;  use utf8;         

Esto mas que nada es para realizar una buena programación, sin fallo alguno

open (PRUEBA, "tiemtux.txt");

open es el comando que abre el archivo

PRUEBA es el filehandle que le pasamos al archivo(debe ir con mayúscula)

tiemtux.txt es el archivo que vamos a abrir

while (<PRUEBA>) {

Es un bucle que leerá todo el archivo,de principio a fin

chomp;

Este comando limpia la lectura,parecido a chop

print "$_\n";

Imprime el valor del ciclo que a tomado,que es la ultima entrada,osea el archivo en si.

}

Todo lo que empieza tiene que acabar y este símbolo cierra el bucle a igual que lo abre el que esta en el bucle.

Y así se abren los archivos

Vamos a hacer algo mas interesante

Vamos a vitaminar el scirpt :D

Editamos nuestro script que quede así:

#!/usr/bin/env perl

use strict;
use warnings;
use utf8;

if ($ARGV[0]) {

open (PRUEBA, $ARGV[0]) || die "$!\n";

while (<PRUEBA>) {

chomp;

print "$_\n";

                 }
}

else {
print "\n[+] Sintax : $0 <archivo>\n";
}



Como les he dicho Unix funciona con distintos lenguajes de programacion y perl no es la diferencia

Por ejemplo alien,si alien el programa para manejo de paquetes es un script mutante en perl

Ver paquete
Y no hay mucha sertesa de cuantos programas de unix usan perl para funcionar,por ejemplo el script que les deje arriba seria el equivalente de cat

Ya que se dice que cat,si cat el comando para concatenar en los sistemas tipo Unix usa este algoritmo

while(<>){print}
Que lo use en el script de arriba,pues bien vamos a hacer un clon de cat

No se ciertamente si es un clon, porque si queremos ver cat esta ofuscado y nos sale algo como esto



Y tampoco he visto el código fuente,pero debe ser algo muy grande,el clon que vamos a realizar es solo para lo que se usa mas,que es para husmear en archivos de texto.

Bueno vamos a empezar

Primero necesitamos que nuestro script abrir-prueba.pl este así:



Pueden remplazar $0 por catp: así


#!/usr/bin/env perl

use strict;
use warnings;
use utf8;

if ($ARGV[0]) {

open (PRUEBA, $ARGV[0]) || die "$!\n";

while (<PRUEBA>) {

chomp;

print "$_\n";

                 }
}

else {
print "\n[+] Sintax : catp <archivo>\n";
}



Ahora lo copiamos a /usr/bin/


sudo cp abrir-prueba.pl /usr/bin/catp
Ahora le damos permisos de ejecución


sudo chmod +x /usr/bin/catp
Y listo ya tenemos catp(cat perl) en nuestro directorio de programas,ahora ejecuten:

Ahora si cualquier archivo de texto que quieran:

con la sintaxis

catp archivo_texto

Por ejemplo 

Con cat:



Con catp:


Identico?

En este caso si,ya que como dije cat tiene una enorme potencia y
muchas otras funciones,pero si se dan cuenta también sirven los pipes:



Bueno eso es todo,si ya saben usar join,split,etc sabrán que se pueden hacer muchasssssss cosas con perl,pero si no es asi esperen próximos tutoriales.

A y me falto explicar el codigo:



#!/usr/bin/env perl

use strict;        #
use warnings; # Buena programación
use utf8;          #

if ($ARGV[0]) { # Verificamos si existe ARGV,(ya lo habíamos visto)

open (PRUEBA, $ARGV[0]) || die "$!\n"; # Abre el archivo,que sera   # ARGV[0],y si no lo puede abrir ira a la función die

while (<PRUEBA>) { # Iniciamos bucle para que lo abra

chomp; # Limpiamos codigo

print "$_\n"; # Imprimimos el texto

                 }
} # Todas las llaves son para abrir y cerrar, así que llevan               # compañero,analizar el código para saber cual es de cual

else {
print "\n[+] Sintax : catp <archivo>\n"; # Si no hay ARGV imprime   # esto
}




No hay comentarios.:

Publicar un comentario

Los comentarios serán revisados antes de ser publicados.