sed -n '/<a /p' html.txt | sed 's#<a \([^>]*\)>#--SYN--\1--FIN--#g; s/<//g; s/>//g' | \ sed 's/--SYN--/</g; s/--FIN--[^<]*</></g; s/[^<]*</</; s/--FIN--.*/>/;' | \ sed "s#<[^>]*href=\([^a-zA-Z>]*http://[^ >]*\)[^>]*># @\1@#g; s/<[^>]*>//g; s/'//g; s/@/ /g" > url.txt
|
这里提取的是 <a href="http://domain/path/to/html.html"> 中的 http://domain/path/to/html.html
也就是
1、只匹配html的Tag为a的节点。
2、选择的是href的值。
3、href的值需要使用http://开头,就是说不支持相对路径。
写成sed脚本可以表示为:
# this script is use to dig href url from html file s/<a \([^>]*\)>/--SYN--\1--FIN--/g; s/[><]//g; s/--FIN--/>/g; s/--SYN--/</g; s/^\(.*\)$/>\1</; s/>[^<]*</></g; s#<[^>]*href=[^a-zA-Z>]*\(http://[^ >]*\)[^>]*>#@\1@#g; s/<[^>]*>//g; s/@@/\ /g; s/[>< '"@]//g; /^ *$/d; |
sed脚本2:
:a; h; s@^[^<]*<a\s*[^>]*\s*href\s*=\s*['"]*\(http://[^> "']*\)[^>]*>.*@\1@p; g; s@<[a-zA-Z/][a-zA-Z]*[^>]*>@@; t a; /<[a-zA-Z\/][a-zA-Z]*[^>]*$/{N; b a; }; d; |
本文转自 chengxuyonghu 51CTO博客,原文链接:http://blog.51cto.com/6226001001/1612987,如需转载请自行联系原作者