Bonjour
Je récupère une chaine html qui est une liste de nom, dont certains sont en gras.

Les balises pour les mots en gras sont <dt><a et </a></dt>

J'aimerai juste afficher les mots en gras, à l'exclusion des autres.

J'ai cherché avec sed, mais je n'ai rien trouvé;

Quelqu'un aurai une idée ?
Tu peux essayer ça :
grep "</a></dt>" listing.html | sed 's/\(.*\)<dt><a\(.*\)>\(.*\)<\/a><\/dt>\(.*\)$/\3/'
Mais ça dépend de la mise en forme de ta liste, et je ne garantis pas la pertinence des balises étant une quiche en HTML :-D
Je serais parti sur du grep aussi, par ex
grep -Po "(?<=<dt><a>)[a-z]*([^</a></dt>]*)"
Après si la syntaxe change un poil c'est foutu. Le plus propre serait de faire avec un parser html dans un langage plus évolué.

EDIT: correction (un grand D s'était glissé de je ne sais d'où dans la balise de fin)
Merci de vos conseils, mais cela ne fonctionne pas...
@CanalGuada

ta commande ne me renvoie que le dernier mot en gras de la liste, alors qu'il y en a d'autre avant

@madko

ta commande ne me renvoie rien du tout...
Il faut surement l'adapter en fonction de ton besoin
Il ressemble à quoi ton listing ?

Si je prends par exemple le code source de la page de ce fil (avec les balises <dt><strong><a>...</a></strong></dt> par contre) ça donne ça.
$ grep "</a></strong></dt>" listing2.html | sed 's/\(.*\)<dt><strong><a\(.*\)>\(.*\)<\/a><\/strong><\/dt>\(.*\)$/\3/'
chepioq
CanalGuada
madko
chepioq
madko
CanalGuada
Aujourd'hui, cela ressemble à ceci ;
<dt><a class="sexe0" href="/contenus/prenom/1577/Adeline.html">Adeline</a></dt><dd><a class="sexe0" href="/contenus/prenom/5465/Adine.html">Adine</a>, <a class="sexe0" href="/contenus/prenom/4266/Aline.html">Aline</a>, <a class="sexe0" href="/contenus/prenom/4856/Lina.html">Lina</a>, <a class="sexe0" href="/contenus/prenom/4348/Line.html">Line</a></dd>	</dl>
Aujourd'hui il n'y a qu'un seul nom en gras "Adeline", mais suivant les jours il peut en avoir plusieurs.
Donc aujourd'hui cela fonctionne, mais pour celui d'hier je n'ai d'affiché que le dernier nom en gras "Yaël":
<dt><a class="sexe0" href="/contenus/prenom/979/Agnes.html">Agnès</a></dt><dd><a class="sexe0" href="/contenus/prenom/980/Aina.html">Aina</a>, <a class="sexe0" href="/contenus/prenom/982/Aissa.html">Aïssa</a>, <a class="sexe0" href="/contenus/prenom/981/Ania.html">Ania</a>, <a class="sexe0" href="/contenus/prenom/983/Nessie.html">Nessie</a>, <a class="sexe0" href="/contenus/prenom/4832/Oanell.html">Oanell</a></dd><dt><a class="sexe1" href="/contenus/prenom/3214/Aquilin.html">Aquilin</a></dt><dt><a class="sexe1" href="/contenus/prenom/786/Jo%EBl.html">Joël</a></dt><dd><a class="sexe0" href="/contenus/prenom/787/Jodelle.html">Jodelle</a>, <a class="sexe0" href="/contenus/prenom/788/Jodie.html">Jodie</a>, <a class="sexe0" href="/contenus/prenom/789/Jody.html">Jody</a>, <a class="sexe0" href="/contenus/prenom/790/Joe.html">Joe</a>, <a class="sexe0" href="/contenus/prenom/791/Jo%EBlle.html">Joëlle</a>, <a class="sexe0" href="/contenus/prenom/792/Jo%EBlliane.html">Joëlliane</a>, <a class="sexe0" href="/contenus/prenom/4588/Jo%EBlline.html">Joëlline</a>, <a class="sexe0" href="/contenus/prenom/5299/Jo%EBlyne.html">Joëlyne</a>, <a class="sexe2" href="/contenus/prenom/795/Yo%EBl.html">Yoël</a>, <a class="sexe0" href="/contenus/prenom/796/Yo%EBlle.html">Yoëlle</a></dd><dt><a class="sexe0" href="/contenus/prenom/434/Laure.html">Laure</a></dt><dd><a class="sexe0" href="/contenus/prenom/4883/Laora.html">Laora</a>, <a class="sexe0" href="/contenus/prenom/435/Laura.html">Laura</a>, <a class="sexe0" href="/contenus/prenom/5302/Lauraine.html">Lauraine</a>, <a class="sexe0" href="/contenus/prenom/436/Laurana.html">Laurana</a>, <a class="sexe0" href="/contenus/prenom/4452/Laurane.html">Laurane</a>, <a class="sexe0" href="/contenus/prenom/4345/Laureen.html">Laureen</a>, <a class="sexe0" href="/contenus/prenom/4629/Laureline.html">Laureline</a>, <a class="sexe0" href="/contenus/prenom/4541/Laurene.html">Laurène</a>, <a class="sexe0" href="/contenus/prenom/437/Laurette.html">Laurette</a>, <a class="sexe0" href="/contenus/prenom/439/Lauriane.html">Lauriane</a>, <a class="sexe0" href="/contenus/prenom/438/Laurie.html">Laurie</a>, <a class="sexe0" href="/contenus/prenom/5054/Laurine.html">Laurine</a>, <a class="sexe0" href="/contenus/prenom/5032/Laury.html">Laury</a>, <a class="sexe0" href="/contenus/prenom/5429/Lori.html">Lori</a>, <a class="sexe0" href="/contenus/prenom/5751/Lorina.html">Lorina</a>, <a class="sexe0" href="/contenus/prenom/5459/Loryne.html">Loryne</a></dd><dt><a class="sexe1" href="/contenus/prenom/125/Rene.html">René</a></dt><dd><a class="sexe0" href="/contenus/prenom/1574/Renata.html">Renata</a>, <a class="sexe0" href="/contenus/prenom/1575/Renate.html">Renate</a>, <a class="sexe1" href="/contenus/prenom/4858/Renato.html">Renato</a>, <a class="sexe0" href="/contenus/prenom/126/Renee.html">Renée</a>, <a class="sexe0" href="/contenus/prenom/1576/Rhea.html">Rhéa</a></dd><dt><a class="sexe2" href="/contenus/prenom/793/Ya%EBl.html">Yaël</a></dt><dd><a class="sexe0" href="/contenus/prenom/794/Ya%EBlle.html">Yaëlle</a></dd>     </dl>
J'ai essayé avec le code de la page fedora-fr, et cela fonctionne en effet.

En y regardant d'un peu plus près, je pense que cela est du au fait que sur la page fedora-fr, cela se trouve sur des ligne différentes, tandis que dans mon fichier tous est sur la même ligne....
Comme a dit madko, il vaut mieux utiliser quelque chose de plus adapté que des regexp.

Avec xmlstarlet (j’ai du corriger ton exemple pour le rendre correct du point de vue xml mais je suppose que tu as un fichier complet) :
-> xmlstarlet sel -t -v '//dt/a' test.xml
Agnès
Aquilin
Joël
Laure
René
Yaël
'//dt/a' est un XPath.
Bon ,c'est un peu compliqué pour moi, je vais laisser tomber après avoir exploré une autre piste...
Ma solution ne fonctionne pas chez toi ? Ou c’est juste que tu ne comprends pas comment elle fonctionne ?
C'est juste que je ne comprend pas comment cela fonctionne (j'ai bien sur compris qu'il fallait installer le paquet xmlstarlet) mais après...
sel : pour dire que tu veux sélectionner une valeur dans ton xml (xmlstarlet peut faire beaucoup d’autres choses, comme éditer, transformer, formater…)
-t : pour dire que commences un template de sélection (tu peux spécifier plusieurs -t)
-v : pour dire que tu veux afficher la valeur de l’élément qui sera sélectionné
'//dt/a' : c’est la partie intéressante, c’est le xpath qui désigne ce que tu veux sélectionner. Ici, ça signifie : toutes les balises <a> directement contenues dans des balises <dt>. Le // du début signifie que la balise dt peut être située n’importe où, mais tu peux aussi spécifier un chemin absolu.

Tu pourras te renseigner facilement sur la syntaxe d’XPath en faisant une recherche sur internet. Tu peux sélectionner facilement tout ce que tu veux dans un doc xml avec. Je vois mal quelle solution plus simple tu pourrais trouver.
Effectivement... ne connaissant pas xmlstarlet, je suis passé de la mise en oeuvre d'une solution bien trop lourde (saxon) pour importer des données xml après transformation XSL, au traînage de pieds pour implémenter sous python ce type de fonctionnalité assez basique – pressentant, quand bien même le développement ne soit pas ma profession, avoir loupé quelque chose.

Donc, un grand merci Wilqu ! :-D
C'est exactement ce qu'il me fallait pour 2 ou 3 petits scripts maison.
Bon, je n'y arrive pas...
Est-ce que c'est du au fait que c'est un fichier html, donc mal-formé au sens xml ?
Tu peux préciser l’erreur que tu obtiens ? Si l’exemple que tu as collé est la totalité du fichier que tu as, il faut le corriger en retirant la balise fermante à la fin (qui n’a pas l’air d’avoir de balise ouvrante correspondante) et mettre tout le fichier dans une seule balise, en rajoutant <html></html> (par exemple) au début et à la fin.
Le fichier d'origine est beaucoup plus gros, je n'ai donné que la partie dont je voulais extraire les données.

mais en suivant tes conseils, cela fonctionne, maintenant faut juste que je coupe au bon endroit et que j'ajoute les tags <html></html>, mais ça je vais y arriver.

Merci

Je passe en résolu.
Encore merci, j'ai le résultat que je souhaitai.

C'est pour un conky qui récupère les noms des saints du jour à partir du site nominis.
Voici la commande complète :
wget -q http://nominis.cef.fr/ -O saint.html -O - | iconv -f latin1 -t utf8 | sed '1,/Bonne Fête !/d; /Autres Fêtes du Jour/Q;' |  sed '$d' | sed '1i<html>' | sed '4a</html>' | xmlstarlet sel -t -v '//dt/a' | awk 'ORS=NR%6?" ":"\n"'
Qui me renvoie ceci pour aujourd'hui :
Céline Astier Grégoria Ursule Viateur Walfroy
ok tu as un peu pris le problème à l'envers. Dans ce genre de cas, il faut plutot chercher une api, que de parser une page dont tu ne maitrise pas le contenu. Si demain le webmaster change légèrement la mise en page, ton script ne marche plus.

J'ai du coup chercher sur google "ephemeride api" j'ai trouvé ça
http://fetedujour.fr/api/text-saints-21-10 où la syntaxe de l'url est la suivante: format-type-jour-mois. Tu as du xml, text, json comme format. Beaucoup plus simple à récuperer le résultat non?
Je connais le site que tu indiques, le soucis est qu'il n'est pas en accord avec le site nominis.cef.fr (qui est le site officiel des églises de france), et parfois (comme aujourd'hui) le nom des saints sont différents.