使用 wget 和 grep 从页面中提取超链接

Extracting hyperlinks from a page using wget and grep

我正在尝试使用 wget 和 grep 提取单个页面中的所有超链接,我发现这段代码使用 PCRE 来获取所有超链接。

但我对正则表达式或 html 不是很熟悉,所以我真的很想知道这是否是一种合理的解决方法,或者是否有更好的方法。 我也有一个问题。你真的需要转义引号吗?我测试了几次,但似乎没有什么不同。

wget https://google.com -q -O - | grep -Po '(?<=href=\")[^\"]*'

任何帮助将不胜感激!

您的命令将抓取全部存在于一行中的所有 href 字符串的内容 href="..."

如果整个字符串都被 'single quotes' 包围,则无需单独转义双引号 \"。引用的目的是防止字符被 shell 解释。唯一需要转义双引号的时间是允许扩展,例如:

foo=href
grep -Po "(?<=${foo}=\")[^\"]*"

这与

完全相同
grep -Po '(?<=href=")[^"]*'

这意味着

  • Grep,使用 PCRE
  • return o只匹配
  • 查找以 (?<=...) 文字字符串 href="
  • 开头的任何字符串
  • 匹配任何不是双引号的东西 [^"]
  • 零次或多次*

如果您解析 <a href="">* 的使用可能 return 一个空字符串。您可以使用 +(一次或多次)而不是 *(零次或多次)。