使用mac上的grep从页面中提取链接

时间:2017-09-12 08:43:31

标签: html url hyperlink grep

我在SO上看到了与此类似的其他问题,但没有一个解决了我的问题。

我有一个本地html页面,我想提取链接,但我不只是想要链接,我想要创建链接的整个标记,如

My Page 1
page1.html
My Page 2
page2.html
My Page 3
page3.html

如果它更容易,我对此很好

grep "<a href=" t2.html |
sed "s/<a href/\\n<a href/g" |
sed 's/\"/\"><\/a>\n/2' |
grep href

我已经尝试过这个命令,这是关于SO

的另一个问题的答案
mapit.py

但由于某种原因,它只是从页面中提取了几个链接

如果您想查看,tutorial我正在尝试提取链接。

感谢

2 个答案:

答案 0 :(得分:2)

cat indexantigo.html | grep -oiE "<a([^>]+)>([^<]+)</a>"

它将匹配所有内联<a>标记,而不包含其他标记。

<强>详情

<a([^>]+)>:从<a开始>结束,不包含>

([^<]+):不包含<

</a>:以</a>

结束

请注意,<a>标记与其中的其他标记不匹配。例如<a href="#"><img src="1.jpg" /></a>

编辑:我同意Anthony Geoghegan的回答,使用像Python这样的脚本语言会更方便。

答案 1 :(得分:2)

Grep和sed是执行此任务的错误工具。它们都是面向行的实用程序,它们逐行处理文件或标准输入。但是,您要处理的文件在链接文本中包含换行符,因此这些实用程序将无法工作。

一般来说,parsing HTML with regex is a bad idea。最好使用专用的HTML / XML解析器(应该有一个您熟悉的语言库)。对于诸如此类的任务,我发现创建Python脚本(当然比shell编程更容易)并使用其Beautiful Soup library更容易。