org-mode 将 macro 部分提取出来, 并按字段排序

#+title: Archives
#+include: ../include/org-macros.setup
#+options: title:t
#+options: html-style:nil html-scripts:nil
#+html_head: <link href="../css/site.css" rel="stylesheet">


{{{link(Blogging with Emacs org-mode,blogging-with-org-mode,2018,11,06,1)}}}
{{{link(测试一下 org-mode 转 html ,org-mode-test,2018,11,12,0)}}}
{{{link(关于 org-mode 的中文标题可以吗,test,2018,12,01,0)}}}
{{{link(关于 org-mode 的中文标题可以吗,测试一下中文标题 org-mode,2018,12,01,0)}}}

内容部分示意如下:

{{{link(超链接显示名称,文件名,年,月,日,文章置顶标识符)}}}

步骤比较明显, 分 2 步:

  1. 把 macro 部分提取出来
  2. 排序: 置顶 -> 年 -> 月 -> 日

第 2 部分可以用 sort 来解决: sort -n -t ',' -k 6r -k 3r -k 4r -k 5r

第 1 部分有没有办法一次性将 macro 取出来? 目前用 string-match 可以匹配一行, 不知道如何一次性取出来. 实在不行就用循环了.

(setq file-contents (with-temp-buffer
                      (insert-file-contents "~/test.org")
                      (buffer-string)
                      ))

(when (string-match "^\\({{{.+}}}\\)$" file-contents)
  (setq str (match-string 1 file-contents))
  (message str)
)