正则表达式使用grep从html文件中查找外部链接

时间:2010-06-09 12:28:27

标签: regex linux grep

从过去的几天开始,我正在尝试开发一个正则表达式,使用grep从提供给它的网页中获取所有外部链接。

这是我的grep命令

grep -h -o -e "\(\(mailto:\|\(\(ht\|f\)tp\(s\?\)\)\)\://\)\{1\}\(.*\?\)" "/mnt/websites_folder/folder_to_search" -r 

现在grep似乎返回了该给定行中外部链接之后的所有内容

实施例

如果html文件在同一行包含类似的内容

谷歌

HTTPS://yahoo.com'>雅虎

然后给定的grep命令返回以下结果

http://www.google.com">Google</a><p><a href='https://yahoo.com'>Yahoo</a></p>

这里的想法是,如果一个html文件在同一行中包含多个链接(irrespective in a,img etc),那么正则表达式应该只获取链接而不是该行的所有内容

我设法在rubular.com中开发了相同的内容 正则表达式如下

("|')(\b((ht|f)tps?:\/\/)(.*?)\b)("|')

使用上述输入 但我不能在grep中复制相同的内容 有谁可以帮忙 我无法修改html文件所以不要求我这样做我既不能查找每个特定的标签,也不检查它们的属性以获取外部链接,因为它可以加载处理时间而我的应用程序不要求

谢谢

2 个答案:

答案 0 :(得分:3)

试试这个:

cat / path / to / file | egrep -o“(mailto | ftp | http(s)?://){1} [^'\”] +“

egrep -o "(mailto|ftp|http(s)?://){1}[^'\"]+" /path/to/file

每行输出一个链接。它假设每个链接都在单引号或双引号内。要排除某些特定的域链接,请使用-v

egrep -o "(mailto|ftp|http(s)?://){1}[^'\"]+" /path/to/file | egrep -v "yahoo.com"

答案 1 :(得分:1)

默认情况下,grep会打印出找到匹配项的整行。 -o开关仅选择一行的匹配部分。请参阅man page