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

 ==的功能在[[]]和[]中的行为是不同的,如下: 

[cpp] view plaincopy
 
    1. [[ $a == z* ]]   # 如果$a以"z"开头(模式匹配)那么将为true   
    2. [[ $a == "z*" ]] # 如果$a等于z*(字符匹配),那么结果为true   
    3.   
    4. [ $a == z* ]     # Fi

posted on 2015-09-30 17:23  月未央  阅读(1471)  评论(0编辑  收藏  举报

导航