【问题标题】:extracting links from a page using grep on a mac在 Mac 上使用 grep 从页面中提取链接
【发布时间】:2017-09-12 08:43:30
【问题描述】:

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

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

<a href="page1.html">My Page 1</a>
<a href="page2.html">My Page 2</a>
<a href="page3.html">My Page 3</a>

如果它更容易,我可以接受

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

我已经尝试过这个命令,它是关于 SO 上另一个问题的答案

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

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

如果你想看,this is the page我正在尝试提取链接。

谢谢

【问题讨论】:

    标签: html url hyperlink grep


    【解决方案1】:
    cat indexantigo.html | grep -oiE "<a([^>]+)>([^<]+)</a>"
    

    它将匹配所有内联的&lt;a&gt; 标签而不包含其他标签。

    详情

    &lt;a([^&gt;]+)&gt;:以&lt;a 开头,以&gt; 结尾,并且不包含&gt;

    ([^&lt;]+):不包含&lt;

    &lt;/a&gt;:以&lt;/a&gt;结尾

    请注意,&lt;a&gt; 标签不会与其中的其他标签匹配。如&lt;a href="#"&gt;&lt;img src="1.jpg" /&gt;&lt;/a&gt;

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

    【讨论】:

    • 这是一个很好的正则表达式,用于匹配包含在一行中的链接。不幸的是,HTML 源代码有许多包含换行符的链接,因此这只返回页面中的一部分链接。
    • 是的,当然,我会编辑我的答案以精确说明这个细节。
    • 我还要指出-o 选项是grep 的GNU 扩展(在Mac 上可能不可用)。无论如何,我认为这个答案值得一票,因为它是一个很好的正则表达式,对于链接文本都在一行中的简单情况很有用。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-12
      • 1970-01-01
      • 1970-01-01
      • 2011-06-04
      • 1970-01-01
      相关资源
      最近更新 更多