2010-06-09 59 views
4

从过去几天我试图开发一个正则表达式,它使用grep从给定的网页中获取所有外部链接。正则表达式使用grep从html文件中找到外部链接

这里是我的grep命令

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

现在的grep似乎在给定的行

如果HTML文件包含这样的事情上一样的外部链接后返回的一切line

Google

https://yahoo.com'> Yahoo

然后给定的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文件,所以不要问我这样做,我既不能找到每个特定的标签,并检查它们的属性来获得外部链接,因为它addup处理时间和我的应用程序不要求

谢谢

回答

3

试试这个:

猫/路径/到/文件| 。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" 
+0

谢谢你的回复它为我工作再次感谢。 – Amar 2010-06-10 04:45:02

+1

不客气。 '谢谢'太多了,接受一个答案就足够了(: – hudolejev 2010-06-10 17:19:22

+1

可能是[UUOC](http://en.wikipedia.org/wiki/Cat_(Unix)#Useless_use_of_cat)。 – miku 2013-04-15 05:47:40

1

默认的grep打印整个线找到匹配上的-o开关只选择一条线的匹配部分见man page