Re: [HS] parser du html en shell
Bonjour,
Jerome Moinet a écrit :
fabrice régnier a écrit :
je cherche à parser la balise <A variables_de_la balise >blabla</A> et à
récupérer le contenu blabla.
echo "<A variables_de_la balise >blabla</A>" | sed s/"<[^>]*>"/""/g
Si il y a des espaces ou des tabulations devant :
echo " <A variables_de_la balise >blabla</A>" | sed s/"<[^>]*>"/""/g
| sed s/"^[ ]*"/""/
AMHA, cette solution marche très bien pour du nettoyage de code (i.e.
enlever toutes les balises).
Le problème ici c'est qu'on peut avoir autre chose que la balise A sur
la ligne, par exemple b :
echo " <b>truc</b> <A variables_de_la balise >blabla</A>" | sed
s/"<[^>]*>"/""/g| sed s/"^[ ]*"/""/
truc blabla
or fabrice régnier semble ne vouloir que blabla.
La solution perl marche bien :
% cat blabla.html | \
perl -W -e 'while (<>){print "$2\n" if (/<a(.*?)>(.*)<\/a/oi);};'
on doit pouvoir faire la même chose à base de sed et de remplacements,
mais si l'on tient compte qu'il peut y avoir d'autres balises, d'autres
A avant ou après et plusieurs balises <A, ça ne me parait pas évident.
echo " machin <b>truc</b> Ah ah ah ! <A variables_de_la balise
>blabla</A> <A variables2>bidule</A> chouette" | sed -r
s/"^.*<A[^>]*>([^<]*)<\/A>.*$"/"\1"/g
bidule
Ne donne que le contenu de la dernière balise A.
On doit pouvoir faire mieux en combinant avec grep par exemple :
echo " machin <b>truc</b> Ah ah ah ! <A variables_de_la balise
>blabla</A> <A variables2>bidule</A> chouette" | grep -o -E
"<A[^>]*>([^<]*)<\/A>" |sed -r s/"^.*<A[^>]*>([^<]*)<\/A>.*$"/"\1"/
blabla
bidule
@+
Yannick.
Reply to: