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! |