如何将 org 文件中的最新条目输出并格式化到终端?

How can I output and format the latest entry in an org file to the terminal?

我使用 emacs 和结构如下的 org 文件记录日常笔记:

#+SEQ_TODO: TODO(t) IN_PROGRESS(p) BLOCKED(b) ON_HOLD(h) OPEN(o) QA(q) | DONE(d) CANCELLED(c)

* Notes <2019-04-19 Fri>
** To do:
*** Item 1
*** Item 2
* Notes <2019-04-18 Thu>
** To do:
*** Item 1
*** Item 2
*** Item 3
*** Item 4
etc.

我想在终端中输出最新条目(可能通过 grep、cat、sed 或其他方式),例如,如果我在终端中键入 todo,它将输出:

* Notes <2019-04-19 Fri>
** To do:
*** Item 1
*** Item 2

我试过 grep -A 5 -i "2019-04-18" ~/Documentes/notes.org 之类的方法,但不想手动指定要输出的行数(列表可以是 2 行或 10 行)。我也尝试了一些 sed 并尝试在单词之间输出但运气不佳。

假设最新条目始终位于顶部:

$ awk '(c+=/^\* Notes/)>1{exit} c' file
* Notes <2019-04-19 Fri>
** To do:
*** Item 1
*** Item 2

对于file中的每一行;如果该行匹配 ^\* Notes,则将 c 增加 1;如果 c 大于 1,则退出;如果 c 大于零,打印该行。

并且,如果开头的单个星号后跟 space 仅出现在 Notes 之前,您可以从正则表达式中删除 Notes

awk '(c+=/^\* /)>1{exit} c' file