Как я могу вывести и отформатировать последнюю запись в файле org на терминал? - PullRequest
3 голосов
/ 22 апреля 2019

Я веду ежедневные заметки, используя 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 и пытался выводить между словами, но мне не очень повезло.

1 Ответ

5 голосов
/ 22 апреля 2019

Предполагается, что последняя запись всегда вверху:

$ 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
...