Re: [HS] parser du html en shell
Le Wednesday 15 July 2009 00:44:38 Yves Rutschle, vous avez écrit :
> J'ai une question sur ce caractère:
>
> On Tue, Jul 14, 2009 at 09:58:28PM +0200, Yannick Fouquet wrote:
> > % cat blabla.html | \
> > perl -W -e 'while (<>){print "$2\n" if (/<a(.*?)>(.*)<\/a/oi);};'
>
> ^
>
> Il fait quoi ce 'o'? Je ne le trouve pas dans perlre(1).
>
> Merci d'avance,
> Y.
Le manuel Perl est impressionnant quant à la qualité des documents en
français. Ce n'est pas un programme sinon un langage ( langage pratique
d'extraction et de rapport - Practical Extraction and Report Language ) ce
qui demande de regarder les documents et exemples.
Pour comprendre le code ci-dessus, il faut regarder les documents:
- perlre Expressions régulières
- perlvar Variables prédéfinies en Perl
- perlfaq Foire Aux Questions
- perlrun Invocation de Perl et ses arguments
- perldata Types de données de Perl
Il y a aussi le programme 'perldoc' pour une documentation sur une fonction.
Par exemple pour comprendre comment ouvrir un fichier uniquement en lecture:
% perldoc -f open
Saches que le code dans un script serait différent car il manque des éléments:
#!/usr/bin/perl -w
use strict;
unless ( defined(@ARGV) ) {
print "Usage: $0 doc1.html doc2.html ...\n";
exit(1);
}
while ( my $f = shift(@ARGV) ) {
open(FH,"<" . $f) or die("open($f): $!\n");
print $f . ":\n";
while ( <FH> ) {
chomp();
if ( /<a(.*?)>(.*)<\/a/oi ) {
print $1 . "\n";
}
}
close(FH);
}
exit(0);
Enfin, pour améliorer le code d'une ligne, en utilisant l'option '-n' (boucle
implicite autour de l'intégralité du code - plus besoin de while(<>){...}):
% perl -ne 'print "$1\n" if /<a(.*?)>(.*)<\/a/oi' html.html
Avec l'option '-i' ( édition sur place ) voila un 'sed' dopé à l'EPO en
gardant une sauvegarde tout en modifiant le fichier 'monfichier' :
<http://articles.mongueurs.net/magazines/linuxmag50.html>
% perl -i.backup -pe 's/\bfoo\b/toto/g;s/\bbar\b/titi/g' monfichier
% ls
monfichier
monfichier.backup
Je ne suis absolument pas un expert, mais Perl est riche, puissant et souple
pour ce que tu veux faire.
Personnellement, j'ai appris en lissant et relisant la documentation Perl,
alors j'insiste pour que tu t'y plonge aussi...
Sites:
Introduction au langage Perl ( c'est quoi 'for', c'est quoi 'while', ...:
<http://www.med.univ-rennes1.fr/~poulique/cours/perl/perl_html/introperl42.html>
Les Mongueurs de Perl:
<http://paris.mongueurs.net/>
<http://articles.mongueurs.net/magazines/>
Salut;
--
(o_
(/)_
S e r g e
Reply to: