从过去几天我试图开发一个正则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
开关只选择一行的匹配部分。 看手册页 。