【发布时间】:2016-11-25 14:30:07
【问题描述】:
我想通过 Bash 使用 sed 或 awk 解析来自网站的数据(随意改变我处理数据的方向)。
这是一个代码示例。
<tbody>
<tr>
<td class="text-left">111</td><td class="text-center">
<a href="/path1.htm">AAA</a>
</td><td class="text-center">
<a href="/path2.htm" class="tp-link-policy">BBB</a>
</td><td class="text-center">
Updated October, 2016
</td>
</tr><tr>
<td class="text-left">CCC</td><td class="text-center">
<a href="/path3.htm">
.
.
.
.
</tr>
</tbody>
通常当我在 PHP 中使用 preg_match 时,我对换行没有任何问题,但在 Bash 中,我需要完全改变我对正则表达式的想法。您是否建议首先准备数据以供 sed 和 awk 读取,以删除所有换行符并根据我希望使用 sed 或 awk 的数据结构以不同的方式重新创建它们?
例如,我会为每个<tr> 创建一个换行符,结果会是这样吗?我是对的还是我应该放弃这种思维方式?这会起作用,但我对这样操作数据感到不舒服。
<tbody>
<tr><td class="text-left">111</td><td class="text-center"><a href="/path1.htm">AAA</a></td><td class="text-center"><a href="/path2.htm" class="tp-link-policy">BBB</a></td><td class="text-center">Updated October, 2016</td></tr>
<tr><td class="text-left">CCC</td><td class="text-center"><a href="/path3.htm">....</tr></tbody>
输出应该是,例如:
111|AAA|BBB|Updated October, 2016
【问题讨论】:
-
你的预期输出是什么?
-
如果您想对 HTML 做任何有用的事情,请忘记使用基于行的文本处理工具,例如 awk 和 sed。
-
对于命令行 HTML 解析,你可以查看
html2(来自xml2包),或hxpipe和相关函数(来自html-xml-utils包)。他们都大致做了你想做的事。 -
我预计会错。完美,非常感谢您提供有用的见解。 @Benjamin W.