在简单的example.html文件中提取两个字符串之间的文本

时间:2013-08-29 18:19:51

标签: html bash awk

我有一个名为example.html的非常基本的html文件(见下文)

<html>
<body>
<div class="one">
    <div class="research">
        <div class="two">
            <p>Lorem ipsum...</p>
        </div>
        <div class="three">
            <p>Lorem ipsum...</p>
        </div>
        <div class="four">
            <p>Lorem ipsum...</p>
        </div>
    </div>  
</div>
</body>
</html>

我希望只获得类似的短语(见下文),但不能删除第一行和最后一行。

<div class="research">
    <p>Lorem ipsum...</p>
    <div class="two"></div>
    <div class="three"></div>
    <div class="four"></div>
</div>

我尝试过awk

cat example.html | awk '/^<div\ class="research">$/,/^<\/div>$/ { print }'

但似乎有些不对劲。

我还尝试使用body标记(见下文)

cat example.html | awk '/^<body>$/,/^<\/body>$/ { print }'

(结果)

<body>
<div class="one">
    <div class="research">
        <div class="two">
            <p>Lorem ipsum...</p>
        </div>
        <div class="three">
            <p>Lorem ipsum...</p>
        </div>
        <div class="four">
            <p>Lorem ipsum...</p>
        </div>
    </div>  
</div>
</body>

它工作正常。

我做错了什么?

提前致谢。

1 个答案:

答案 0 :(得分:6)

cannot parse HTML with regular expressions。假设html是有效的xml,您可以使用:

xmlstarlet sel -t -c '//div[@class="research"]' -nl example.html  
<div class="research">
        <div class="two">
            <p>Lorem ipsum...</p>
        </div>
        <div class="three">
            <p>Lorem ipsum...</p>
        </div>
        <div class="four">
            <p>Lorem ipsum...</p>
        </div>
    </div>