上个礼拜,要求完成一个任务,从下载特定网页并从中抓取一些感兴趣的字段.
做法很简单,用wget获取网页代码,采用正则表达式抓取数据.
刚开始采用Shell,但是到了采用正则的时候出现了问题,我承认我的sed玩的不够好,这个任务应该可以用sed搞定的,但是整了半天都没整好,有人又说可以用grep,弄了半天都没有完成.我开始对使用shell中的小工具反感了起来,虽然根据Unix的哲学,一个工具完成一件事情,通过管道等胶合剂把它们连接在一起.但是,会出现以下的问题:1)对我那个问题而言,可能同时有多个工具可以完成任务,而sed,awk之类的学习成本稍高 2)有一些问题,shell中没有很好的解决办法,比如我将每个网站的地址和抓取数据所需的正则表达式存储在了mysql数据库中,shell中有工具可以访问数据读取它们吗?(如果你知道请告诉我) 3)并不是任何的任务shell中都可以找到工具完成,比如我想写一个测试我的服务器的测试客户端,如果我不会脚本语言,那么很有可能又得从头写一个C程序来完成这个工作.
也就是说,我需要一个工具,功能足够的完备,可以操作文本文件,访问数据库,建立socket连接等等,同时,对一些问题的解决有统一的方案,比如我如果要在文本文件中查找我所需的字段不再要去考虑是采用grep,sed还是awk了.
满足这些要求的脚本语言似乎只有Perl和Python了,去年学过一些Python,感觉语法简洁很容易入门,不过听说速度不够快,今年开始转向了Perl,Perl的语法非常的灵活,是我见到的最灵活的语言,这也许跟这门语言的发明人是个语言学家,倡导"There is more than one way to do it"有关吧.刚开始很不习惯,毕竟我是C程序员出身,习惯了C的语言,现在慢慢的适应了.
话归正题,这里说的放弃Shell指的是不在Shell编程上多花时间,但是基本的Shell命令和概念还是应该有的,万变不离其宗,不懂shell的程序员不能算是优秀的unix程序员,只不过我更加需要一个通用的工具去完成我大部分的工作罢了.