なんか素直にPerlでやったほうが楽そうだなあ、それ。
ちなみに、そのコードじゃ無限ループするぞ。
#!/usr/bin/perl
while($line = <STDIN>) {
    if($line =~ /(0?[1-9]|1[0-2])月(0?[1-9]|[1-2][0-9]|3[01])日/) {
        $month = $1; $day = $2;
        if($month < 10 || $day < 10) {
            printf "%s -> [[%d月%d日|%02d月%02d]]\n", $&, $month, $day, $month, $day;
        }
        else {
            print "$& -> [[$month月$day日]]\n";
        }
    }
}