提取文本beetwen两个单词并在特定行中

时间:2018-06-28 11:07:09

标签: bash awk sed wget

我正在尝试制作一个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>

每次下载页面时,我都必须读取511strong>广告之间的行</strong61中的两个值在此示例中为65;在此示例中为6165,但每次都不同)

html提取的两个值必须能够将它们分配给两个变量

感谢任何想法

2 个答案:

答案 0 :(得分:0)

假设我们有一个名为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

答案 1 :(得分:0)

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

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

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