通过Shell脚本基于表列从HTML中提取文本

时间:2012-10-31 21:26:26

标签: regex linux bash shell

我需要编写一个读取html文件sample.html的shell脚本,并根据另一个表列从表列中提取数据。例如,这是HTML代码:

<table style="BORDER-COLLAPSE: collapse"
  border="0" bordercolor="#000000"
  cellpadding="3" cellspacing="0" width="100%" height="200">
  <tr >
    <td class="fontStyleOne" width="30%">
      <div align="left">
      core6690.myserverdomain.com </div>
    </td>
    <td  class="tdfontTwo" width="30%">
      <div class="label-styler" align="left">
      admin</div>
    </td>
  </tr>
  <tr >
    <td class="fontStyleOne" width="30%">
      <div align="left">
      core6691.myserverdomain.com </div>
    </td>
    <td  class="tdfontTwo" width="30%">
      <div class="label-styler" align="left">
      secondary </div>
    </td>
  </tr>
  <tr >
    <td  class="fontStyleOne" width="30%">
      <div align="left">
      core6692.myserverdomain.com </div>
    </td>
    <td  class="tdfontTwo" width="30%">
      <div class="label-styler" align="left">
      primary </div>
    </td>
  </tr>
</table>

假设我想确定“admin”的URL,然后结果将是core6690.myserverdomain.com;如果我的输入是“主要”,那么输出将是“core6692.myserverdomain.com”等等......

HTML页面有更多的数据,标题标签,页脚等等,但我正在寻找的重要内容放在一个表格中,我在代码中列出了完全相同的结构......除了它还有更多的行,不一定只有3个,如本例所示。

我在这个网站上看到过seg,grep,正则表达式,awk和其他工具的相关答案,但是它们都没有足够接近我正在寻找的东西......而且我没有太多的经验修改和使它们符合我需要的方法。

有什么建议吗?提前谢谢。

2 个答案:

答案 0 :(得分:4)

如果您允许使用其他工具,我的Xidel可以这样做。

使用xpath:

xidel /tmp/f.html -e "//tr[td[2] = 'admin']/td[1]"

或模式匹配:

xidel /tmp/f.html -e "<tr><td>{.}</td><td>admin</td></tr>

至少这是你发布的摘录的方式,对于较大的文件,它取决于其他的东西。

答案 1 :(得分:1)

#/bin/bash

for i in `cat sample.html | grep '<\/div>' | sed 's/\s\+//'|sed 's/<.*>//'`; do
    if [ $i == $1 ];
    then
        echo $prev
    fi
    prev=$i
done

使用

的示例
$ ./filter.sh primary
core6692.myserverdomain.com

P.s:sample.html的格式应该是你在这里发布的,服务器和带有标签的名称,并以空格或制表符开头。