我正在寻找创建一个快速脚本,但我遇到了一些问题。
<li type="square"> Y </li>
我基本上使用wget下载HTML文件,然后尝试在文件中搜索上面的代码段。 Y是动态的并且每次都在变化,所以在一个中它可能是“Dave”,而在另一个中是“Chris”。所以我试图让bash脚本找到
<li type="square"> </li>
并告诉我两者之间的情况。文件的一般格式非常混乱:
<html stuff tags><li type="square">Dave</li><more html stuff>
<br/><html stuff>
<br/><br/><li type="square">Chris</li><more html stuff><br/>
我一直无法提出任何可用于解析文件的内容,并且非常感谢有人给我推进正确的方向。
编辑 -
<div class="post">
<hr class="hrcolor" width="100%" size="1" />
<div class="inner" id="msg_4287022"><ul class="bbc_list"><li type="square">-dave</li><li type="square">-chris</li><li type="square">-sarah</li><li type="square">-amber</li></ul><br /></div>
</div>
是我想要从中提取名称的代码块。将“ - ”符号添加到列表中以最小化其范围,因此我只获得该列表。我遇到的问题是:
awk '{print $2}' FS='(<[^>]*>)+-' 4287022.html > output.txt
仅为输出提供第一个列表项,而不是其余列表项。
答案 0 :(得分:2)
通常不应该使用正则表达式来解析html文件。
相反,您可以使用我的Xidel对其执行模式匹配:
xidel 4287022.html -e '<li type="square">{.}</li>*'
或者使用传统的XPath:
xidel 4287022.html -e '//li[@type="square"]'
答案 1 :(得分:1)
您可以使用grep -Eo "<li type=\"square\">-?(\w+)</li>" ./*
。
答案 2 :(得分:0)
awk '{print $2,$3,$4,$5}' FS='(<[^>]*>)+' 4287022.html
这将HTML页面显示为表格。但是,不是像字段分隔符那样运行空格,而是HTML标记的运行是字段分隔符。在这种情况下,第一个字段是行开头的空白区域。案例中的第二个字段是名称,因此我们打印它。
结果
-dave -chris -sarah -amber
答案 3 :(得分:0)
使用sed:
sed -n 's/.*<li type="square"> *\([^<]*\).*/\1/p' input.html