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

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: