我需要编写一个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>
假设我想确定"管理员"的URL,那么结果将为core6690.myserverdomain.com;如果我的输入是"主要",那么输出将为" core6692.myserverdomain.com"等...
HTML页面有更多数据,标题标签,页脚等等,但是我要寻找的重要内容位于代码中我列出的完全相同结构的表中,除了它有更多的行,不一定只有3个示例。
我已经在本网站上看到了相关的答案,即Seg,Grep,正则表达式,AWK和其他工具,但是它们都不足够接近我想要的东西...此外,我对任何一项都没有太多经验修改并使它们满足我的需求的方法。
有什么建议吗?预先感谢。
我的Xidel可以做到这一点,如果您可以使用其他工具。
with xpath:
xidel /tmp/f.html -e "//tr[td[2] = 'admin']/td[1]"
或模式匹配:
xidel /tmp/f.html -e "<tr><td>{.}</td><td>admin</td></tr>
至少这是您发布的摘录的方式,对于较大的文件,它取决于还有什么。
#/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的格式应非常好,您在此处发布,服务器和名称应使用标签,并以whitespace或tab开始。