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

Ege*_*gel 0 html bash awk

我有一个非常基本的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>
Run Code Online (Sandbox Code Playgroud)

我想得到的只是短语(见下文),但不是删除第一行和最后三行.

<div class="research">
    <p>Lorem ipsum...</p>
    <div class="two"></div>
    <div class="three"></div>
    <div class="four"></div>
</div>
Run Code Online (Sandbox Code Playgroud)

我尝试过awk:

cat example.html | awk '/^<div\ class="research">$/,/^<\/div>$/ { print }'
Run Code Online (Sandbox Code Playgroud)

但似乎有些不对劲.

我也尝试过body标签(见下文)

cat example.html | awk '/^<body>$/,/^<\/body>$/ { print }'
Run Code Online (Sandbox Code Playgroud)

(结果)

<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>
Run Code Online (Sandbox Code Playgroud)

它工作正常.

我做错了什么?

提前致谢.

gle*_*man 6

无法使用正则表达式解析HTML.假设html是有效的xml,您可以使用:

xmlstarlet sel -t -c '//div[@class="research"]' -nl example.html  
Run Code Online (Sandbox Code Playgroud)
<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>
Run Code Online (Sandbox Code Playgroud)