最近处理大批量的html视频信息网页,从中提取视频图片url、播放url、主演、导演和简介等。不想写代码,于是直接使用shell下sed命令。

sed的正则表达式确实很复杂(类perl的),花了半个小时才搞定了。但看起来确实很爽,一行就搞定了.
下面这个命令是用于预处理信息的:

1
find /tmp/mov_html | xargs cat | sed -n ’s/\(.*<dd>.*\”character_.*\)\|\(.*\”list_.*\)\|\(.*leiyancontent.*div\>\).*/\1\2\3\n/p’ > ./temp_mov_info.txt

但运行起来确实痛苦,一直占CPU 90%以上,一共运行了近6个小时才完毕。即使通过xargs限制进程数和每次传入参数个数也不管用。
一方面是html中只有一小块信息是有效的,而这里是处理文件的所有行,浪费资源;另一方面,正则表达式写的不够完善,匹配很花时间,若在python程序中通过简单的find即可找到需要的块,然后再使用正则表达式匹配即可。
基于这两点,之后使用python程序改写了,效率大大提高,大约花了15分钟即可完成。sed一般比较适合少量文件的处理,若文件非常多且处理中无用信息很多,最好先用脚本程序(shell/python/perl)作预处理。