我有一个bash脚本:
v1='value="'
v2='" type'
do_parse_html_file() {
sed -n "s/.*${v1}//;s/${v2}.*//p" "${_SCRIPT_PATH}/IBlockListLists.html"|egrep '^http' >${_tmp_file}
}
...这是从html文件中提取的URL。 我想输出:
somename URL
somename URL
---输入html文件的示例如下所示:
</tr>
<tr class="alt01">
<td><b><a href="http://www.iblocklist.com/list.php?list=bcoepfyewziejvcqyhqo">iana-reserved</a></b></td>
<td>Bluetack</td>
<td><img style="border:0;" src="I-BlockList%20%7C%20Lists_files/star_4.png" alt="" height="15" width="75"></td>
<td><input style="width:200px; outline:none; border-style:solid; border-width:1px; border-color:#ccc;" id="bcoepfyewziejvcqyhqo" readonly="readonly" onclick="select_text('bcoepfyewziejvcqyhqo');" value="http://list.iblocklist.com/?list=bcoepfyewziejvcqyhqo&fileformat=p2p&archiveformat=gz" type="text"></td>
</tr>
<tr class="alt02">
<td><b><a href="http://www.iblocklist.com/list.php?list=cslpybexmxyuacbyuvib">iana-private</a></b></td>
<td>Bluetack</td>
<td><img style="border:0;" src="I-BlockList%20%7C%20Lists_files/star_4.png" alt="" height="15" width="75"></td>
<td><input style="width:200px; outline:none; border-style:solid; border-width:1px; border-color:#ccc;" id="cslpybexmxyuacbyuvib" readonly="readonly" onclick="select_text('cslpybexmxyuacbyuvib');" value="http://list.iblocklist.com/?list=cslpybexmxyuacbyuvib&fileformat=p2p&archiveformat=gz" type="text"></td>
</tr>
---结果应该如下:
iana-reserved http://list.iblocklist.com/?list=bcoepfyewziejvcqyhqo&fileformat=p2p&archiveformat=gz iana-private http://list.iblocklist.com/?list=cslpybexmxyuacbyuvib&fileformat=p2p&archiveformat=gz
---是否可以通过sed on one line命令获得它?如果是这样,请帮助。
列表的第一部分 - “somename”始终优先于坐在下一个/后面的URL,不一定是第二个/ line。
>somename ... is delimited by 'href="URL">' and '</a>' on one line
>URL ... is always delimited by 'value="' and '" type' on any following line
谢谢你,
亲切的问候。
微米。
答案 0 :(得分:2)
我的cli html parser Xidel只有一行:
xidel "${_SCRIPT_PATH}/IBlockListLists.html" -e '//a/concat(., " ", @href)'
答案 1 :(得分:1)
shell不是正确的工具。
我可以使用 HTML在python或perl(ruby
,java
,php
)中向您展示一些脚本解析器。这些是这项工作的正确工具。
这个问题可能是本网站上讨论最多的问题,请参阅此excellent post
制作此网站的其中一个人写了this too
答案 2 :(得分:0)
使用解析器。其中有很多,这里有一个使用HTML::TokeParser
的例子。
script.pl
的内容:
#!/usr/bin/env perl
use warnings;
use strict;
use HTML::TokeParser;
my $p = HTML::TokeParser->new( shift ) || die;
while ( my $tag = $p->get_tag( 'a' ) ) {
printf qq|%s %s\n|, $p->get_text, $tag->[1]{href};
}
像以下一样运行:
perl-5.14.2 script.pl htmlfile
产量:
iana-reserved http://www.iblocklist.com/list.php?list=bcoepfyewziejvcqyhqo
iana-private http://www.iblocklist.com/list.php?list=cslpybexmxyuacbyuvib