[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

RE: Grep en perl



lo más sencillo es que uses expresiones regulares, dado tu fichero de entrada podrías ejecutar el comando:

$ perl -e "$_=<stdin>; /^CommID: (.*)/; print $1;" < fichero

En tu código, para quedarte con el valor de la variable que mencionas te llegaría añadir lo siguiente:

$valor=$body; $valor =~ s/^CommID: (.*)/\1/;

y tendrías en $valor el valor de la variable que deseas.

> Date: Mon, 27 Oct 2008 09:42:01 -0300
> From: fishfromsalta@gmail.com
> To: debian-user-spanish@lists.debian.org
> Subject: Re: Grep en perl
>
> El día 27/10/08, Javier <correolista@gmail.com> escribió:
> > Hola lista,
> >
> > estoy escribiendo un programilla en perl muy simple. Coge desde STDIN
> > la entrada, que es un correo electrónico y muestra los campos que este
> > tiene. Luego, dentro del campo $body (siempre tiene un formato
> > específico algo: valor) necesito quedarme sólo con un campo. ¿Cómo
> > puedo lograrlo?
> > ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> > El programa:
> > ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> > my $mbox= \*STDIN;
> > my $mb = Mail::MboxParser->new($mbox);
> > for my $msg ($mb->get_messages)
> > {
> > my $to = $msg->header->{to};
> > my $from = $msg->header->{from};
> > my $subject = $msg->header->{subject} || '<No Subject:>',
> > my $body = $msg->body($msg->find_body,0);
> > my $body_str = $body->as_string || '<No message text>';
> > print "From: $from\n",
> > "To: $to\n",
> > "Subject: $subject\n",
> > "Message Text: $body_str\n";
> > }
> >
> > ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> > El mail de entrada:
> > ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> > Pages: 1
> > Receiver:
> > Quality: 196
> > ...
> > GroupID: 16
> > CommID: c000000040
> >
> > Processing time was 0:39.
> >
> > ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> > ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> > La idea es leer con el programa esta entrada y luego conseguir
> > quedarme en una variable con el valor "c000000040". Alguna idea de
> > cómo realizar ese "grep" en perl. Lo intenté, pero en perl no consigo
> > sacarlo.
> >
> aquí tenés un ejemplo de uso de grep:
> http://perl.about.com/od/perltutorials/qt/perlgrep.htm
>
> y /parece/ que tus datos tienen que estar en un array. Yo (no tengo un
> perl a mano, así que lo mas seguro es que lo siguiente no funcione) lo
> haría con algo como
>
> if ($cadena=~ /CommID/ ) { ($campo,$valor)=split(':', $cadena) }
>
> o algo así, mas información:
> http://www.troubleshooters.com/codecorn/littperl/perlreg.htm#op_=~
> http://perlenespanol.baboonsoftware.com/tutoriales/funciones/funcion_split_y_join.html


Explore the seven wonders of the world Learn more!

Reply to: