推荐方法在Unix或类Unix终端解析XML或HTML:
如果您正在寻找一种方法从unix命令行执行此操作,我建议首先考虑使用xml解析工具而不是awk,grep或sed。
例如,您的系统可能有xmllint。如果你的html包含在文件index.html中。下面xmllint命令的工作来提取文本:
xmllint --html --xpath "//div[contains(@class, 'plot_summary')]/div[contains(@class, 'summary_text')]/text()" index.html
文本需要一个命令后,修剪所以你可能管到另一个命令做到这一点:
(xpath="//div[contains(@class, 'plot_summary')]/div[contains(@class, 'summary_text')]/text()" && \
xmllint --html --xpath "$xpath" index.html) \
| sed -e 's/^[[:space:]]*//' -e '/^[[:space:]]*$/d'
这sed的命令,我们一举超越输出有两个表达式。第一个在该行's/^[[:space:]]*//'
的开始删除空白和第二删除该只是空白的任何行'/^[[:space:]]*$/d'
有你可以研究(见接受的答案)其他XML命令行分析器工具: How to execute XPath one-liners from shell?
使用sed的可怕方法:
您可以通过使用echo将文件分解成一行来解决sed的分析问题。然后使用sed替换你可以提取你想要的文本。这不是一个很好的方法,因为它是一个非常格式相关方法:
(set -o noglob; echo $(cat index.html)) \
| sed 's/.*<div[^>]*class[^=]*=[^"]*"summary_text"[^>]*>[[:space:]]*\([^<]*\).*/\1/'
更新通过set command
禁用globbing每mklement0的评论加你试图grep命令,它会告诉你已经尝试过的东西...此外,这是最适合HTML解析器 – Sundeep