使用 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,使用
P
CRE
- return
o
只匹配
- 查找以
(?<=...)
文字字符串 href="
开头的任何字符串
- 匹配任何不是双引号的东西
[^"]
- 零次或多次
*
如果您解析 <a href="">
,*
的使用可能 return 一个空字符串。您可以使用 +
(一次或多次)而不是 *
(零次或多次)。
我正在尝试使用 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,使用
P
CRE - return
o
只匹配 - 查找以
(?<=...)
文字字符串href="
开头的任何字符串
- 匹配任何不是双引号的东西
[^"]
- 零次或多次
*
如果您解析 <a href="">
,*
的使用可能 return 一个空字符串。您可以使用 +
(一次或多次)而不是 *
(零次或多次)。