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

mik*_*owl 3 emacs bash terminal awk org-mode

我使用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.
Run Code Online (Sandbox Code Playgroud)

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

* Notes <2019-04-19 Fri>
** To do:
*** Item 1
*** Item 2
Run Code Online (Sandbox Code Playgroud)

我已经尝试过类似的操作,grep -A 5 -i "2019-04-18" ~/Documentes/notes.org但是不想手动指定要输出多少行(列表可以是2行或10行)。我还尝试了一些sed尝试,并尝试在单词之间输出,但是运气不太好。

ogu*_*ail 5

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

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

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

而且,如果在开始时只有一个星号后跟一个空格,Notes那么您才可以Notes从正则表达式中删除它:

awk '(c+=/^\* /)>1{exit} c' file
Run Code Online (Sandbox Code Playgroud)