【问题标题】:extract text beetwen two words and in a specific line提取两个单词之间和特定行中的文本
【发布时间】:2018-06-28 11:07:09
【问题描述】:

我正在尝试制作一个 linux bash script 来下载 html 页面,从该 html 页面中提取数字并将它们分配给一个变量。

html 页面有几行,但我对这些很感兴趣:

<tr>
      <td width="16"><img src="img/ico_message.gif"></td>
      <td width="180"><strong> TIME 1</strong></td>
      <td width="132">
        <div align="right"><strong>61</strong></div></td>
    </tr>
    <tr>
      <td width="16"><img src="img/ico_message.gif"></td>
      <td width="180"><strong> TIME 2</strong></td>
      <td width="132">
        <div align="right"><strong>65</strong></div></td>
    </tr>
  </table></td>

每次下载页面时,我都必须读取strong&gt;&lt;/strong之间的511行中的两个值(在本例中为61广告656165 在这个例子中,但每次都不一样)

html中提取的两个值必须能够赋值给两个变量

感谢您的建议

【问题讨论】:

  • 添加目前尝试过的命令组合。
  • Bash 不是适合这项工作的工具。如果标记不是太损坏,我会使用 HTML 感知工具(在我的情况下为xsh),或者在 Perl 中使用HTML::TableExtract
  • 您应该使用xpath 实用程序来解析xml/html。您可以从 bash 脚本调用命令行 xpath 工具。
  • 欢迎来到 Stack Overflow!抱歉,这不是 StackOverflow 的工作方式。 “我想做 X,请给我提示和/或示例代码”形式的问题被认为是题外话。请访问help center并阅读How to Ask,尤其是阅读Why is “Can someone help me?” not an actual question?
  • 查看this 答案,它展示了如何使用 Xpath 从 html 中提取链接。并查看this 页面以了解 Xpath。有了这两个,我 100% 相信你可以做到 ;-)。如果您仍然无法管理,请在此处发布您的努力,我们很乐意为您提供帮助。

标签: bash awk sed wget


【解决方案1】:

假设我们有一个名为page.html 的页面。你可以先用grep选择行,然后用sed提取值,最后用awk迭代选择值:

$ var0=$(cat page.html |\
    grep -Ee "<strong>[0-9]+</strong>" -o |\
     sed  -Ee "s/<strong>([0-9]+)<\/strong>/\1/g" |\
      awk 'NR%2==1')

$ var1=$(cat page.html |\
    grep -Ee "<strong>[0-9]+</strong>" -o |\
     sed  -Ee "s/<strong>([0-9]+)<\/strong>/\1/g" |\
      awk 'NR%2==0')

输出:

$ echo $var0
61
$ echo $var1
65

【讨论】:

    【解决方案2】:

    这可能对你有用(GNU sed):

    sed -rn '/TIME/{:a;N;5bb;11bb;ba;:b;s/.*TIME ([^<]*).*<strong>([^<]*).*/var\1=\2/p}' file
    

    使用与上述代码中TIME 关联的整数来区分两个变量名称。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多