真コマンドラインだけでtodoリスト

知人にhttp://lifehacker.com/5155450/todotxt-cli-manages-your-tasks-from-the-command-lineを教えてもらった

コマンドライン信者のための ToDo 管理法らしいがスクリプト組んでいる時点で漢らしくないw

そこでコマンドラインだけでtodoリストを作ろうとおもった。

要件は以下の3つ。

1.Todo の追加
2.Todoの検索
3.Todoの削除

開始。

ToDoの追加

漢は黙ってリダイレクトw

$ echo "`date -d '1 month'`:ケンの誕生日" >> todo
$ echo "`date -d '2 month'`:タカシの誕生日" >> todo
$ echo "`date -d '35 day'`:ヨーコの誕生日" >> todo

echoを"でくくっていないと 後の検索の時にはまるので注意

Todoの検索

IFSを\nにすれば行指向にできる (awkつかえって?)

$ (IFS=$'\n'; for i in `cat todo`; do [[ $i < `date -d '1 month'` ]] && echo $i ; done )
2009年  4月 12日 日曜日 15:16:40 JST:ケンの誕生日
$ (IFS=$'\n'; for i in `cat todo`; do [[ $i > `date -d '1 month'` ]] && [[ $i < `date -d '60 day'` ]] && echo $i ;done )
2009年  4月 16日 木曜日 15:17:12 JST:ヨーコの誕生日

ToDoの削除

だめだ。sed使っちゃった。

$ sed -i 's/^\(.*ケンの誕生日.*\)/#\1/' todo
$ cat todo
#2009年  4月 12日 日曜日 15:16:40 JST:ケンの誕生日
2009年  5月 12日 火曜日 15:16:56 JST:タカシの誕生日
2009年  4月 16日 木曜日 15:17:12 JST:ヨーコの誕生日

grepでもいけるか。

$ (IFS=$'\n';t=/tmp/$$;for i in `cat todo`; do if [ `echo $i|grep ケン` ]; then echo "#$i"; else echo $i;fi>>$t ; done;mv $t todo)
$ cat todo
#2009年  4月 12日 日曜日 15:16:40 JST:ケンの誕生日
2009年  5月 12日 火曜日 15:16:56 JST:タカシの誕生日
2009年  4月 16日 木曜日 15:17:12 JST:ヨーコの誕生日

というわけで車輪の再発明…まぁ。bashの練習にはなった。