sedで日本語表記の日付から年月日の漢字を消して/に置き換える
2017年 4月 19日や2017年4月19日のような日付形式をsedで置換しようとしたら意外にハマったのでメモ。
ポイントは以下の通り。 - ( や ) はエスケープ必要 - blankspace もエスケープ必要? - + や ? もエスケープ必要 - { や } もエスケープ必要
やりたいパターンマッチはこういう内容。
だけど sed ではエスケープせねばならない部分が多いので、結果的にこういう処理になる。
$ echo '2017年 4月 19日' | sed 's/\([0-9]\+\)年\ \?\([0-9]\+\)月\ \?\([0-9]\+\)日/\1\/\2\/\3/g' 2017/4/19
上記の内容を踏まえたうえで日本語の日付時刻から漢字を抜く処理をこんなふうに書いてみた。
#!/bin/sed -f s/\([0-9]\+\)年\ \?\([0-9]\+\)月\ \?\([0-9]\+\)日/\1\/\2\/\3/g s/\([0-9]\+\)時\ \?\([0-9]\+\)分\ \?\([0-9]\+\)秒/\1:\2:\3/g s/曜日//g s/日/Sun/g s/月/Mon/g s/火/Tue/g s/水/Wed/g s/木/Thu/g s/金/Fri/g s/土/Sat/g