我使用emacs和组织文件保存每日笔记,其结构如下:
#+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
大于零,则打印该行。
而且,如果开头的单个星号后跟一个空格只出现在Notes
之前,你可以从正则表达式中删除Notes
:
awk '(c+=/^\* /)>1{exit} c' file