1

我正在寻找创建一个快速脚本,但我遇到了一些问题。

<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

只输出第一个列表项,而不是其余的。

4

4 回答 4

2

您通常不应该使用正则表达式来解析 html 文件。

相反,您可以使用我的Xidel对其执行模式匹配:

xidel 4287022.html -e '<li type="square">{.}</li>*'

或者使用传统的 XPath:

xidel 4287022.html -e '//li[@type="square"]'
于 2013-04-21T08:15:00.380 回答
1

你可以用grep -Eo "<li type=\"square\">-?(\w+)</li>" ./*这个。

于 2013-04-21T03:49:08.133 回答
0

使用 sed:

sed -n 's/.*<li type="square"> *\([^<]*\).*/\1/p' input.html
于 2013-04-21T04:59:20.777 回答
0
awk '{print $2,$3,$4,$5}' FS='(<[^>]*>)+' 4287022.html

这会将 HTML 页面呈现为表格。但是,不是将空格作为字段分隔符运行,而是 HTML 标记的运行是字段分隔符。在这种情况下,第一个字段是行首的空白区域。案例中的第二个字段是名称,所以我们打印它。

结果

-dave -chris -sarah -amber
于 2013-04-21T03:50:12.620 回答