LINUX.ORG.RU

Знатокам sed или awk


0

0

У меня есть простенький todo-читалка, формат такой todo-list такой:

D08 Это заметка для 8 числа каждого месяца
W4 Это для четверга
M2 Это для февраля
A Эта выводится всегда
для выделения нужной я использую sed:
sed -e "/^\(`date +D%d`\|`date +W%u`\|`date +M%m`\|A\)/!d;s/^[^ ]\+ //" ~/.todo
Но хочу, чтобы были ещё диапазоны, напр. заметка должна выводится с 20 по 31 число любого месяца. Т.е.
D20-31 бла-бла
Но как это реализовать не знаю. Я вообще не программист и вещи сложнее hello world даются мне сложно. Помогите пожалуйста.

P.S. В идеале бы еще можно было указывать не диапазоны, а просто перечисления «W1,3,5 выводить в Пн, Ср, Пт.»

P.S. Может sed не лучший выбор? На чём это реализовать проще всего?

P.S. Кому интересно, вот полный скрипт: http://pastebin.com/1n9HgFyR . Там ещё у меня делается красное выделение для заметок типа «A* это выведется красным, т.к. есть звёздочка после 'A'».


На awk проще всего


awk '/^D/ { here actions for day's   message }
     /^W/ { here actions for week's  message }
     /^M/ { here actions for month's message }
     .......
    '

sdio ★★★★★ ()
Ответ на: комментарий от sdio

К сожалению, я незнаком с awk. Не могли бы Вы написать пример хотя бы для «^D»? Был бы очень признателен, если бы Вы показали, как можно реализовать D??-?? и D??,?? (в лучшем случае D??[-??][,??[-??]...)

paxac ()
Ответ на: комментарий от paxac
echo "D08-31 Это заметка для 8 числа каждого месяца" | awk '
BEGIN { day=strftime("%d") }
/^D/  {if (match($1, "^D([0-9]+)-([0-9]+)",a)) {
          if (a[1]<=day &&  day<=a[2]) {
             $1=""; print $0
          }
       }
      }'

 Это заметка для 8 числа каждого месяца

sdio ★★★★★ ()
Ответ на: комментарий от sdio

Спасибо! А если мне нужно объеденить все случаи: D??[-??][,??[-??]..., то надо их отдельно проверять (через match) или можно сразу как-то?

paxac ()

man sed

Просто прочти инструкцию - их не только программистов пишут, но и для домохозяек. И даже домохозяйки их читают. Только ТП-ы не читают

Led ★★★☆☆ ()
Ответ на: комментарий от Led

Я прочитал уже давно. После этого написал простейший скрипт, который приведен в первом посте. Но как с помощью sed разобрать выражения с диапазонами и перечислениями я так и не понял. Поэтому и спросил помощи.

paxac ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.