shell——html抓取链接
由url获得源码:wget -O url $html_file $input_file
去掉注释<!--.*--> : sed -i -e ":begin;/<!--/,/-->/ {/-->/!{$!{N;b begin};};s/<!--.*-->//;};" $html_file
-i:直接在原文件上修改,-e:同时执行多条命令
-
首先花括号{}代表命令块的开始,类似c的语法,后面就不再说了。
-
:begin
,这是一个标号,man中叫做label,也就是跳转标记,供b和t命令用,本例中使用了b命令。 -
/<<</,/>>>/
,这是一个地址范围(Addresses),后面{}中的命令只对地址范围之间的内容使用。其中逗号前面的部分是开始地址,逗号后面是结束地址,都是正则表达式。由于sed是“流”式“行”处理,所以结束地址是可以省略的,即如果地址的结束范围不存在,那么将一直处理到文件结尾。本例中使用这个地址范围主要是缩小处理的数据量,因为虽然后面用N命令把对一行的处理扩展为了多行,但如果从文件开头一直N扩展到<<<出现为止,buffer中要处理的字符串可能会很长,影响效率。所以去掉这个处理范围也是能够得到正确结果的,
获取含有链接的行并使用正则表达式抽取链接:cat $html_file | grep "<a.*href*" | sed 's/\(.*\)href="\([^"\n]*\)"\(.*\)/\2/g' >$href_file
if..fi
if.. else..fi
if..elif..else..fi
逐行处理文件中内容:
http://www.cnblogs.com/dwdxdy/archive/2012/07/25/2608816.html
while read line
do
done<$file
shell脚本--if判断(数字条件、字符串条件)http://blog.csdn.net/yusiguyuan/article/details/17054231
http://www.cnblogs.com/chengmo/archive/2010/10/02/1841355.html
http://blog.csdn.net/fitywang/article/details/2156089
判断某个字符串是否以某个子串开头:[[..]]表示匹配,里面可以用正则表达式;[..]表示判断。=~表示匹配符
if [[ "$line_url" =~ "mailto*" ]];then
continue
==的功能在[[]]和[]中的行为是不同的,如下:
- [[ $a == z* ]] # 如果$a以"z"开头(模式匹配)那么将为true
- [[ $a == "z*" ]] # 如果$a等于z*(字符匹配),那么结果为true
- [ $a == z* ] # Fi