从过去的几天开始,我正在尝试开发一个正则表达式,使用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文件所以不要求我这样做我既不能查找每个特定的标签,也不检查它们的属性以获取外部链接,因为它可以加载处理时间而我的应用程序不要求
谢谢
答案 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。