【发布时间】:2021-07-25 03:13:10
【问题描述】:
我正在尝试使用 awk 提取 HTML 列表的内容。 一些列表条目是多行的。
示例输入列表:
<ul>
<li>
<b>2021-07-21:</b> Lorem ipsum
</li>
<li>
<b>2021-07-19:</b> Lorem ipsum
</li>
<li><b>2021-07-10:</b> Lorem ipsum</li>
</ul>
我正在使用的命令:
awk -v RS="" '{match($0, /<li>(.+)<\/li>/, entry); print entry[1]}' file.html
当前输出:
<b>2021-07-21:</b> Lorem ipsum
</li>
<li>
<b>2021-07-19:</b> Lorem ipsum
</li>
<li><b>2021-07-10:</b> Lorem ipsum
期望的输出:
<b>2021-07-21:</b> Lorem ipsum
<b>2021-07-19:</b> Lorem ipsum
<b>2021-07-10:</b> Lorem ipsum
我知道问题是因为列表条目没有用空行分隔。 我想过使用非贪婪匹配,但显然 Awk 不支持它。 有没有可能的解决方法?
【问题讨论】:
-
Don't Parse XML/HTML With Regex. 我建议使用 XML/HTML 解析器 (xmlstarlet, xmllint ...)。
-
@Cyrus 这是一个巨大的 awk 的一小部分。添加依赖项是不可取的。