0

我有一个非常基本的 html 文件,名为example.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>

我只想得到类似的短语(见下文),而不是通过删除第一行和最后 3 行。

<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>

它工作正常。

我做错了什么?

提前致谢。

4

1 回答 1

6

不能使用正则表达式解析 HTML。假设 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>
于 2013-08-29T18:56:11.500 回答