やってみる

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

キーワードリストからMarkdownのアンカーコードを生成する

 自動化。

成果物

キーワード

 元となるキーワードは以下コマンドで取得する。

sqlite3 :memory: "pragma pragma_list;"

キーワード一覧

application_id
auto_vacuum
automatic_index
busy_timeout
cache_size
cache_spill
case_sensitive_like
cell_size_check
checkpoint_fullfsync
collation_list
compile_options
count_changes
data_version
database_list
default_cache_size
defer_foreign_keys
empty_result_callbacks
encoding
foreign_key_check
foreign_key_list
foreign_keys
freelist_count
full_column_names
fullfsync
function_list
ignore_check_constraints
incremental_vacuum
index_info
index_list
index_xinfo
integrity_check
journal_mode
journal_size_limit
legacy_alter_table
legacy_file_format
locking_mode
max_page_count
mmap_size
module_list
optimize
page_count
page_size
pragma_list
query_only
quick_check
read_uncommitted
recursive_triggers
reverse_unordered_selects
schema_version
secure_delete
short_column_names
shrink_memory
soft_heap_limit
synchronous
table_info
table_xinfo
temp_store
temp_store_directory
threads
user_version
wal_autocheckpoint
wal_checkpoint
writable_schema

 これを元にしてMarkdownのアンカーコードを作成する。

Markdownアンカー

* [キーワード](#キーワード)
<a name="キーワード"></a>
## [キーワード](#キーワード)

* [キーワード](#キーワード)

vim

vim pragmas.txt

 以下のvimコマンドを打つ。

:%s/\v^(\w+)$/* [\1](#\1)/g

sed

cp pragmas.txt pragmas_1.txt
sed -r -i.bak "s/^(\w+)$/* [\1](#\1)/g" pragmas_1.txt

<a name="キーワード"></a>

vim

vim pragmas.txt

 以下のvimコマンドを打つ。

:%s/\v^(\w+)$/<a name="\1"><\/a>/g

sed

cp pragmas.txt pragmas_2.txt
sed -r -i.bak "s/^(\w+)$/<a name=\"\1\"><\/a>/g" pragmas_2.txt

## [キーワード](#キーワード)

vim

vim pragmas.txt

 以下のvimコマンドを打つ。

:%s/\v^(\w+)$/## [\1](#\1)/g

sed

cp pragmas.txt pragmas_3.txt
sed -r -i.bak "s/^(\w+)$/## [\1](#\1)/g" pragmas_3.txt

ファイル結合

 以下の2つを連結したい。

<a name="キーワード"></a>
## [キーワード](#キーワード)

 以下で2ファイルを交互に出力する。

paste -d'\n' pragmas_2.txt pragmas_3.txt > pragmas_4.txt

 これで以下の連続がキーワード分だけできた。

<a name="キーワード"></a>
## [キーワード](#キーワード)

問題

 単語間にスペースが含まれていると機能しない。スペースを_に置換してアンカーにしたい。

 でも、どうやって実現できるかわからない。スペースを含めるだけなら(\w+)([\w\s]+)にすればいいだけだろう。それで以下のようになるはず。

* [key word](#key word)

 以下までならできそう。行全体を同じように置換すればいいだけだから。

* [key-word](#key-word)

 でも、以下のようにする方法がわからない。([\w\s]+)で行の2箇所にヒットするのに、そのうちの1箇所のスペースだけは-に置換したい。そもそも、そんなことできるのか? スペースの数が固定なら後方参照を使えそうだが、不定だから無理だし。

* [key word](#key-word)

所感

 さらなる要求として、以下のような複数行に渡ったものを量産したい。これは次回やる。

<a name="キーワード"></a>
## [キーワード](#キーワード)

\`\`\`sql
pragma キーワード;
pragma キーワード = 真偽値;
\`\`\`

参考

対象環境

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

前回まで