やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

Bashスクリプト キーワードからMarkdownのアンカーリストを作成する

 Linuxコマンドだけを使って。目次と見出しをつくる。

成果物

input

A
B
C

output

* [A](#A)
* [B](#B)
* [C](#C)
<a name="A"></a>
## [A](#A)
<a name="B"></a>
## [B](#B)
<a name="C"></a>
## [C](#C)

 目次(TOC(table of contents))と見出しをつくる。

前回まで

mkmdh.sh

 キーワード一覧からMarkdownのアンカー一覧を作成する。

# $1: キーワードリスト
# 結果: * [キーワード](#キーワード)
_mklist() { echo "$1" | sed -r "s/^(\w+)$/* [\1](#\1)/g"; }
# $1: キーワードリスト
# 結果: <a name="キーワード"></a>
_mkanchor() { echo "$1" | sed -r "s/^(\w+)$/<a name=\"\1\"><\/a>/g"; }
# $1: キーワードリスト
# 結果: ## [キーワード](#キーワード)
_mkh2() { echo "$1" | sed -r "s/^(\w+)$/## [\1](#\1)/g"; }
# mkmdh
# $1: キーワードリスト
# 結果: markdownのアンカーを量産する
# * [キーワード](#キーワード)
# ...
# <a name="キーワード"></a>
# ## [キーワード](#キーワード)
# ...
run() {
    local list="`_mklist "$1"`"
    local anchor="`_mkanchor "$1"`"
    local h2="`_mkh2 "$1"`"
    local anch2="`paste -d'\n' <(echo "$anchor") <(echo "$h2")`"
    echo "$list"
    echo "$anch2"
}
run "`cat`"

run.sh

 テスト実行コード。

SCRIPT_DIR=$(cd $(dirname $0); pwd)
cd "$SCRIPT_DIR"

echo -e "A\nB\nC" | ./mkmdh.sh

 結果。OK!

* [A](#A)
* [B](#B)
* [C](#C)
<a name="A"></a>
## [A](#A)
<a name="B"></a>
## [B](#B)
<a name="C"></a>
## [C](#C)

対象環境

$ uname -a
Linux raspberrypi 4.19.42-v7+ #1218 SMP Tue May 14 00:48:17 BST 2019 armv7l GNU/Linux