我需要编写一个读取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和其他工具的相关答案,但是它们都没有足够接近我正在寻找的东西......而且我没有太多的经验修改和使它们符合我需要的方法。
有什么建议吗?提前谢谢。
答案 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的格式应该是你在这里发布的,服务器和带有标签的名称,并以空格或制表符开头。