0

我需要编写一个 shell 脚本来读取 html 文件sample.html并根据另一个表列从表列中提取数据。例如,这是 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 和其他工具的相关答案,但是它们都没有足够接近我正在寻找的东西......另外我对任何方法都没有太多经验作为修改并使它们适合我的需要。

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

4

2 回答 2

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>

至少您发布的摘录是这样的,对于较大的文件,它取决于还有什么。

于 2012-10-31T23:27:34.523 回答
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

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

于 2012-10-31T23:55:09.593 回答