需要从包含大量条目的文件中提取.co.uk网址,一些.com .us等。我只需要.co.uk。任何方式这样做? pd:我正在学习bash
编辑:
代码示例:
<a href="http://www.mysite.co.uk/" target="_blank">32</a>
<tr><td id="Table_td" align="center"><a href="http://www.ultraguia.co.uk/motets.php?pg=2" target="_blank">23</a><a name="23"></a></td><td id="Table_td"><input type="text" value="http://www.ultraguia.co.uk/motets.php?pg=2" size="57" readonly="true" style="border: none"></td>
注意一些重复
重要:我需要所有链接,破坏或404也是
在网上找到了这个代码:
cat file.html | tr " " "\n" | grep .co.uk
输出:
href="http://www.domain1.co.uk/"
value="http://www.domain1.co.uk/"
href="http://www.domain2.co.uk/"
value="http://www.domain2.co.uk/"
认为我很接近
谢谢!
答案 0 :(得分:0)
由于还没有答案,我可以为您提供一个丑陋而强大的解决方案。您可以利用wget
命令获取文件中的URL。通常,wget
用于从该网址下载,但是通过拒绝wget
时间通过DNS查找,它将无法解析任何内容并只打印网址。然后,您可以在那些包含.co.uk的URL上进行grep。整个故事变成:
wget --force-html --input-file=yourFile.html --dns-timeout=0.001 --bind-address=127.0.0.1 2>&1 | grep -e "^\-\-.*\\.co\\.uk/.*"
如果您想要删除每一行的剩余时间戳信息,您可以通过sed
管道输出,如| sed 's/.*-- //'
。
如果您没有wget
,那么您可以获得here
答案 1 :(得分:0)
使用awk
的一种方式:
awk -F "[ \"]" '{ for (i = 1; i<=NF; i++) if ($i ~ /\.co\.uk/) print $i }' file.html
输出:
http://www.mysite.co.uk/
http://www.ultraguia.co.uk/motets.php?pg=2
http://www.ultraguia.co.uk/motets.php?pg=2
如果您只对唯一网址感兴趣,请将输出传输到sort -u
HTH
答案 2 :(得分:0)
以下方法使用真正的HTML引擎来解析HTML,因此面对CDATA部分或其他难以解析的语法会更可靠:
links -dump http://www.google.co.uk/ -html-numbered-links 1 -anonymous \
| tac \
| sed -e '/^Links:/,$ d' \
-e 's/[0-9]\+.[[:space:]]//' \
| grep '^http://[^/]\+[.]co[.]uk'
它的工作原理如下:
links
(基于文本的Web浏览器)实际检索该网站。
-dump
会将呈现的页面发送到stdout。-html-numbered-links
请求编号的链接表。-anonymous
调整默认值以增加安全性。tac
撤消行排序列表中链接的输出sed -e '/^Links:/,$ d'
删除链接表之后(转换之前,之前)的所有内容,确保实际页面内容不会被错误分析sed -e 's/[0-9]\+.[[:space:]]//'
从各个链接中删除编号的标题。grep '^https\?://[^/]\+[.]co[.]uk'
仅查找以.co.uk
结尾的主机部分的链接。