2010-09-24 23 views
1

Je cherchais une solution à ce problème depuis un certain temps, mais je ne peux pas le comprendre par moi-même. J'ai donc beaucoup de blocs HTML de code, et je veux rechercher une chaîne spécifique contenue dans l'une des balises internes et s'il y a correspondance, je veux retourner sa valeur de balise parent. Voici par exemple »awk renvoie une valeur de balise HTML parent si son contenu de balise enfant correspond - possible?

<li rel="Returns this value"> 
    <some other tags and elements here /> 
    <a class="link"><span>This match</span></a> 
</li> 

Nous recherchons chaîne This match et il retournera Returns this value. Est-ce possible awk? Sinon, ce qui est plus simple d'y arriver? Cela ne me dérange pas de solution, mais awk ou commande similaire Je cours sur le serveur Ubuntu et j'ai un accès root, donc si je le voulais, je pourrais compter sur d'autres langages, tels que Ruby, Python, Perl, PHP, et d'autres ...

J'ai été capable de chercher une chaîne entre les balises span, et de retourner son contenu, mais cela pourrait être fait beaucoup plus facilement avec la simple commande sed, donc ça ne sert pas encore à grand chose. Soyez améliorés de faire ce que je besoin de le faire, alors voici va:

awk 'BEGIN{RS="";FS="</span>"} 
/li/{ 
for(i=1;i<=NF;i++){ 
    if($i ~ /span/){ 
     gsub(/.*span>/,"",$i) 
     print $i 
    }  
} 
}' 

Lorsqu'il est utilisé sur exemple ci-dessus, il retournera This match. Merci beaucoup pour vos suggestions.

Répondre

2

En général you can't parse html with regular expressions.

Ce qui ne signifie pas que vous ne peut pas analyser html dans awk, bien que ce serait un gros travail et je ne l'ai jamais entendu parler de quelqu'un à le faire.

Si vos cibles sont bien définies et que l'entrée est assez uniforme et que vous pouvez garantir certaines choses concernant l'imbrication des tags dans votre entrée, vous pourrez peut-être la gérer.

Cependant, pour la plupart, awk est le mauvais outil pour le travail. Mieux vaut choisir une langue qui a un moteur d'analyse HTML disponible et l'utiliser. Perl, python, php, ruby ​​... beaucoup de choix.