我有一个名为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>
它工作正常。
我做错了什么?
提前致谢。
答案 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>