【问题标题】:Parse data or data in table through Bash [duplicate]通过Bash解析数据或表中的数据[重复]
【发布时间】: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 的数据结构以不同的方式重新创建它们?

例如,我会为每个&lt;tr&gt; 创建一个换行符,结果会是这样吗?我是对的还是我应该放弃这种思维方式?这会起作用,但我对这样操作数据感到不舒服。

<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.

标签: regex bash parsing


【解决方案1】:

毕竟我用过xmllint。

xmllint --html --shell <file>

然后我执行此命令来检索所需的 xpath。

grep <text>

当您在 html 文件中找到结构时,您可以根据 xpath 完全搜索您的文件。

xmllint --html --xpath <xpath> <file>

无论使用 Python 和 Beautiful Soup 多么高效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-18
    • 1970-01-01
    • 1970-01-01
    • 2022-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多