Roam Researchの日付タイトルをObsidianにどう持ってくるか
たとえばFebruary 8th, 2021のような文字列を[[YYYY-MM-DD]]みたいな形にする。
二つアプローチが考えられる。
正規表現で置換していく
[[(何個か文字) (二桁まで数字th), (四桁の数字)を探す
$3-$1-$2に置換する
さらにその何個か文字を、1~12月までに対応させて置換する
たとえば
code:bash.sh
d='February 8th, 2021'
echo $d | sed -E "s/(.*)^\S(0-9{1,2})th,^\S(0-9{4})/\3-\1-\2/g" | sed -E "s/February/02/g" | sed -E "s/-(0-9)$/-0\1/g" 2月だけ対応したもの。本式だとこれを12月分まで追記する
変更
code:bash.sh
cat test.md | sed -E "s/January/01/g" | sed -E "s/February/02/g" |sed -E "s/March/03/g" |sed -E "s/April/04/g" |sed -E "s/May/05/g" |sed -E "s/June/06/g" |sed -E "s/July/07/g" |sed -E "s/August/08/g" |sed -E "s/September/09/g" |sed -E "s/October/10/g" |sed -E "s/November/11/g" |sed -E "s/December/12/g" | sed -E "s/-(0-9)\n/0\1/g" | sed -E "s/(0-9{2})^\S(0-9{1,2})th,^\S(0-9{4})/\3-\1-\2/g" | sed -E "s/-(0-9)$/-0\1/g" > test.md pythonだと
このファイルをmdファイルが置いてあるのと同じフォルダに置く
code:re.py
# -*- coding: utf-8 -*-
import glob
import re
files = glob.glob("./*.md")
for file in files:
with open(file) as f:
l = f.read()
su = re.sub(patern,r"\3-\1-\2",l)
zeroset = re.sub(r"-(\d)\]\]",r"-0\1]]",su)
reAfter = zeroset.replace("-January-","-01-").replace("-February-","-02-").replace("-March-","-03-").replace("-April-","-04-").replace("-May-","-05-").replace("-June-","-06-").replace("-July-","-07-").replace("-August-","-08-").replace("-September-","-09-").replace("-October-","-10-").replace("-November-","-11-").replace("-December-","-12-")
with open(file,mode="w") as f:
f.write(reAfter)
日付を順繰りに探す
これまで存在したすべての日付を探す必要はおそらくない
Roam Researchを使いはじめてから当日までの日付を探せばいい。
データ(日付)フォーマットで、使いはじめた日付を"%B %-dth, %Y" のようなフォーマット変換し、その文字列を探す(全ファイル対象)
見つかったらその部分を生成した日付の別フォーマットYYYY-MM-DDで置き換える
一つの日付の探査が終わったら、日付を+1して、同じことを繰り返す