正则expression式来使用grep从html文件中find外部链接

从过去几天我试图开发一个正则expression式,使用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 )在同一行,那么正则expression式应该只提取链接,而不是该行的所有内容

我设法在rubular.com开发相同的正则expression式如下

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

与上面的input工作,但IAM不能够复制相同的grep任何人都可以帮助我不能修改HTML文件,所以不要问我这样做,我既不能find每个特定的标签,并检查其属性获得外部链接,因为它提供了处理时间,我的应用程序不要求

谢谢

尝试这个:

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" 

默认情况下,grep会打印找到的整个行。 -o开关只选择一行的匹配部分。 看手册页 。