pslaboが試したことの記録

はてなダイヤリーからはてなブログに引っ越してきました

この日記は現在実行中の減量記録を含む個人的なメモとして始めましたが、最近はコンピュータやガジェット、ハック、セキュリティネタのほうがメインになっております。

はてなダイヤリー時代はカテゴリ分けが適当だったのですが、これはそのうち直します。


sedで日本語表記の日付から年月日の漢字を消して/に置き換える

2017年 4月 19日や2017年4月19日のような日付形式をsedで置換しようとしたら意外にハマったのでメモ。

ポイントは以下の通り。 - ( や ) はエスケープ必要 - blankspace もエスケープ必要? - + や ? もエスケープ必要 - { や } もエスケープ必要

やりたいパターンマッチはこういう内容。

https://regexper.com/#(%5B0-9%5D%2B)%E5%B9%B4%20%3F(%5B0-9%5D%2B)%E6%9C%88%20%3F(%5B0-9%5D%2B)%E6%97%A5

だけど 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