如何将 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
我使用 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