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

问题描述 投票:3回答:1

我使用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并试图在单词之间输出,但没有太多运气。

bash awk emacs terminal org-mode
1个回答
5
投票

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

$ 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
© www.soinside.com 2019 - 2024. All rights reserved.