如果其子标记内容匹配,则awk返回父HTML标记值 - 可能吗?

时间:2010-09-24 02:02:17

标签: awk html-parsing gawk

我一直在寻找这个问题的解决方案很长一段时间,但我无法自己解决这个问题。

所以我有大量的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 个答案:

答案 0 :(得分:2)

一般you can't parse html with regular expressions.

这并不意味着你无法在awk中解析html,虽然这将是一项很大的工作而且我从来没有听说过有人这样做过。

如果目标定义明确且输入非常统一,并且您可以保证在输入中嵌套标记的某些内容,则可以对其进行管理。

然而,在大多数情况下,awk是错误的工具。最好选择具有HTML解析引擎的语言并使用它。 Perl,python,php,ruby ......很多选择。