Comme il est affiché chaque jour sur le SO: Vous ne pouvez pas traiter HTML avec des expressions régulières. Can you provide some examples of why it is hard to parse XML and HTML with a regex?
qui va double pour un outil aussi limité que sed, avec ses expressions régulières de base.
Si le type d'entrée que vous avez est très limité de telle sorte que chaque lien est dans le format exact même, il pourrait être possible, dans ce cas, vous auriez à poster un exemple de ce format. Mais pour les pages HTML générales, cela ne peut pas être fait.
ETA donné votre exemple: au niveau le plus simple, puisque chaque URL est déjà sur sa propre ligne, vous pouvez sélectionner ceux qui ont l'air à droite et jeter les bits que vous ne voulez pas:
#!/bin/sed -f
s/^<td><a href="\(.*\)">.*<\/a><\/td>$/\1/p
d
Notez toutefois que cela laisserait toujours les URL sous leur forme codée en HTML. Si le script qui a produit ce fichier code correctement ses URL, vous devrez alors remplacer toutes les occurrences de l'entité lt/gt/quot/amp par leur caractère simple '<> "&". Un seul de ceux que vous êtes susceptible de rencontrer est &/amp, ce qui est très courant dans les URLs
Mais! Ce n'est pas tout l'encodage HTML qui pourrait avoir eu lieu. , comme eacute (qui serait valide maintenant nous avons des IRIs), ou des références de caractères numériques (en décimal et hexadécimal) Il y a deux millions de formes potentielles d'encodage pour les caractères incluant Unicode ... en remplaçant chacun individuellement dans sed un exercice massif dans l'ennui.
Alors que
vous pourriez sortir avec elle si vous savez que le script générateur ne sera jamais sortie l'un de ceux, un analyseur HTML est toujours préférable vraiment. (Ou, si vous savez qu'il est bien formé XHTML, vous pouvez utiliser un analyseur XML plus simple, qui a tendance à être intégré dans les bibliothèques standard des langues modernes.)
Il serait utile si vous pouviez être plus précis. À quoi ressemble votre entrée d'échantillon? –