Bash 从两个单词和特定行中提取文本

Bash 从两个单词和特定行中提取文本,bash,awk,sed,wget,Bash,Awk,Sed,Wget,我正在尝试制作一个linuxbash脚本来下载一个html页面,从这个html页面提取数字并将它们分配给一个变量 html页面有几行内容,但我对这些内容感兴趣: <tr> <td width="16"><img src="img/ico_message.gif"></td> <td width="180"><strong> TIME 1</strong></td>

我正在尝试制作一个linux
bash
脚本
来下载一个
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>

时间1
61
时间2
65


每次我下载页面时,我必须阅读这两个值​​在
strong>
之间的
5和
11行中,我们假设有一个名为
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')
这可能适用于您(GNU-sed):


sed-rn'/TIME/{:a;N;5bb;11bb;ba;:b;s/*TIME([^添加到目前为止已经尝试过的命令组合。Bash不是适合此作业的工具。我会使用HTML感知工具(在我的情况下)如果标记没有太坏,或者使用Perl。您应该使用
xpath
实用程序来解析xml/html。有一些命令行
xpath
工具可以从bash脚本调用。欢迎使用Stack Overflow!抱歉,StackOverflow不是这样工作的。“我想做X,请给我一些提示和/或示例代码”请访问并阅读,特别是阅读说明如何使用Xpath从html中提取链接的答案。并查看页面以了解Xpath。有了这两个,我100%相信您可以做到;-)。如果您仍然无法做到,请在此处发布您的努力,我们很乐意为您提供帮助。
$ echo $var0
61
$ echo $var1
65
sed -rn '/TIME/{:a;N;5bb;11bb;ba;:b;s/.*TIME ([^<]*).*<strong>([^<]*).*/var\1=\2/p}' file