我有一个 HTML 文件,我对<pre> </pre>
标签所包含的数据感兴趣。有没有一种单线可以做到这一点?
示例文件:
<html>
<title>
Hello There!
</title>
<body>
<pre>
John Working
Kathy Working
Mary Working
Kim N/A
</pre>
</body>
</html>
输出应该是:
John
Kathy
Mary
Kim
非常感谢小伙伴们,谢谢!
我有一个 HTML 文件,我对<pre> </pre>
标签所包含的数据感兴趣。有没有一种单线可以做到这一点?
示例文件:
<html>
<title>
Hello There!
</title>
<body>
<pre>
John Working
Kathy Working
Mary Working
Kim N/A
</pre>
</body>
</html>
输出应该是:
John
Kathy
Mary
Kim
非常感谢小伙伴们,谢谢!
如果您有 XHTML,则使用xmlstarlet。如果你不那么先通过 HTML Tidy,然后把它变成 XHTML。
由于您特别询问了使用 sed 的解决方案...假设有趣的行总是在包含<pre>
and的行之间</pre>
(看起来完全一样),并且有趣的内容永远不会与开始或结束标记在同一行,并假设第一个这样的块是您唯一要提取的块,并且假设虽然您了解这确实是解决此问题的错误方法,但您仍然想这样做,那么您可以使用 sed 来执行此操作,例如像这样:
sed '1,/<pre>/d;/<\/pre>/,$d'
它删除从第一行到包含的<pre>
所有行以及从包含</pre>
到最后的所有行。
(FWIW,我宁愿使用 XPath 表达式来选择有趣的内容。例如,使用Ignacio Vazquez-Abrams 建议的xmlstarlet可以这样:xmlstarlet sel -t -v /html/body/pre
。)
我的 Perl-fu 很弱,但这适用于您的示例:
$ cat file.html | perl -e'while(<>){if(/<\/pre>/){$a=0;}if($a){print}if(/<pre>/){$a=1;}}' | cut -f1 -d' '
John
Kathy
Mary
Kim