【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 みたいなタグを使ったテーブルだと、うまく動作しないと思う。阿呆ですまん。