放棄Shell,主攻Perl
上個禮拜,要求完成一個任務,從下載特定網頁并從中抓取一些感興趣的字段.
做法很簡單,用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程序員,只不過我更加需要一個通用的工具去完成我大部分的工作罷了.
做法很簡單,用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程序員,只不過我更加需要一個通用的工具去完成我大部分的工作罷了.
posted on 2008-03-17 22:22 那誰 閱讀(3769) 評論(6) 編輯 收藏 引用 所屬分類: Perl