awk возвращает значение родительского тега HTML, если содержимое его дочернего тега совпадает - возможно? - PullRequest
1 голос
/ 24 сентября 2010

Я уже давно ищу решение этой проблемы, но не могу понять это самостоятельно.

Итак, у меня есть куча HTML-блоков кода, и я хочу найти конкретную строку, которая содержится в одном из внутренних тегов, и, если есть совпадение, я хочу вернуть значение родительского тега. Вот пример "

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

Мы ищем строку This match, и она вернет Returns this value. Это возможно в awk? Если нет, то как проще всего это сделать? Я не возражаю против какого-либо решения, однако предпочтение отдается awk или аналогичному инструменту командной строки. Я работаю на сервере Ubuntu и имею root-доступ, поэтому при необходимости я могу положиться на другие языки, такие как Ruby, Python, Perl, PHP и другие.

До сих пор я мог искать строку между тегами span и возвращать ее содержимое. Однако это можно сделать гораздо проще с помощью простой команды sed, так что пока это не слишком полезно. Тем не менее, он все еще может быть полезен и может быть улучшен, чтобы сделать то, что мне нужно, поэтому вот так:

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

При использовании в приведенном выше примере возвращается This match. Большое спасибо за предложения.

1 Ответ

2 голосов
/ 24 сентября 2010

В общем вы не можете разобрать html с регулярными выражениями.

Что не означает, что вы не можете разобрать html в awk, хотя это будет большая работа, и я никогда не слышал, чтобы кто-то делал это.

Если ваши цели четко определены, а входные данные довольно единообразны, и вы можете гарантировать определенные вещи относительно вложенности тегов во входные данные, вы можете управлять этим.

Однако, по большей части, awk - не тот инструмент для работы. Лучше выбрать язык, на котором есть механизм парсинга HTML, и использовать его. Perl, Python, PHP, Ruby ... много вариантов.

...