我使用 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
对于文件
中的每一行;如果该行匹配 ^\* Notes
,则将 c
加 1;如果 c
大于 1,则退出;如果 c
大于零,则打印该行。
而且,如果在 Notes
之前只有一个星号后跟一个空格,您可以从正则表达式中删除 Notes
:
awk '(c+=/^\* /)>1{exit} c' file
关于bash - 如何将 org 文件中的最新条目输出并格式化到终端?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55797089/