推薦方法在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