【Mac】ウェブページのテーブルをコピーして Markdown に変換
Obsidian は、Markdown 記法でメモを作れる、実にイケてるアプリケーションである。version 1.5 から、しち面倒くさかったテーブルを挿入できるようになって、またひとつ便利になった。
新規にテーブルを作るのは、もうこれで十分。
ただ、ウェブサイトに掲載されているテーブルをコピーして、Obsidian にペーストする場合はいまだちょっと面倒くさい。
これをシェルスクリプトでどうにかしよう、というのがこのページの趣旨である。
macOS Sonoma 14.2 で動作確認している。
シェルスクリプト
ということで、以下のようなものを書いてみた。macOS 固有のコマンドである pbpaste
を使用するので、Mac でしか動かない。阿呆ですまん。
📝 tablemake.sh
#!/bin/zsh
# ウェブページのテーブルをコピーしてから、tablemake.sh を実行すると、markdown の書式のテーブルが生成される。
clip=$(pbpaste)
# 列 の数を数える。コピーしたテーブルのセルはタブで区切られているらしい。
count=$(echo "$clip" | awk -F\t '{print NF}')
# 列の最大数をつきとめる。
# 改行の入った変数の echo を for で回す場合、必ずダブルクオートで囲む、とされている。
int=0
for num in $(echo "$count"); do
if (( $int < $num )); then
int=$num
fi
done
# 2 行目にライン挿入。列の数だけ配列に ---- を入れる。
line='----'
for i in $(seq $int); do
lines+=($line)
done
kugiri=$(echo $lines | sed -e 's/ /\t/g')
clip2=$(echo "$clip" | sed -e "2s/^/$kugiri\n/")
# tab をパイプに変換
table=$(echo "$clip2" | grep '\t' | perl -pe 's/^/|/g' | sed -e 's/\t/|/g' -e 's/$/|/g')
echo "$table"
使い方
使い方としては、
名前 | 種族 | オークによる俗称 |
---|---|---|
ライオス | トールマン | 足長 |
マルシル | エルフ | 耳長 |
センシ | ドワーフ | 地底人 |
チルチャック | ハーフフット | 小人 |
こういったテーブルをコピーした状態で、ターミナルで上記 tablemake.sh
を実行する。
Markdown 記法に直されたテーブルが出力されるはずだ。これを Obsidian にコピペすれば完了となる。
❯ tablemake.sh
|名前|種族|オークによる俗称|
|----|----|----|
|ライオス|トールマン|足長|
|マルシル|エルフ|耳長|
|センシ|ドワーフ|地底人|
|チルチャック|ハーフフット|小人|
たぶんだけど、セルをまたぐというか、colspan
みたいなタグを使ったテーブルだと、うまく動作しないと思う。阿呆ですまん。