clojureで簡易grepコマンドを作ってみる。
必要なこと
- ファイルの読み込み方(できればseqで取り出したい)
- clojure.contrib.duck-streamsのread-linesとreaderを使えばいい。
- 正規表現の使い方
- re-find,re-pattern
- .classファイルの生成の仕方
- (compile
)
- (compile
code
;;file:tgrep.clj (ns tgrep (:gen-class) (:use [clojure.contrib.duck-streams :only (reader read-lines)])) (defn grep "extract mathed line from file" [re file] (filter #(re-find re %) (read-lines (reader file)))) (defn -main [& args] (let [rx (first args), files (rest args)] (doseq [file files] (doseq [line (grep (re-pattern rx) file)] (println line)))))
compile
;;*compile-path*が存在しないとだめ ;;class-pathからtgrep.cljが読み取れないとだめ (compile 'tgrep)
実行
java -cp ./classes:**/clojure.jar:**/clojure-contrib.jar <regexp> <file> ...