calendar в Linux и русские даты

Создано: 2015-01-20 — изменено: 2016-12-13 — метки: linux

Заметка об еще одной интересной, но забытой программе

В Linux, оказывается, помимо более-менее известной программы cal, печатающей календарик:

$ cal
    Январь 2015       
Вс Пн Вт Ср Чт Пт Сб  
             1  2  3  
 4  5  6  7  8  9 10  
11 12 13 14 15 16 17  
18 19 20 21 22 23 24  
25 26 27 28 29 30 31

есть также программа calendar, печатающая список празников на сегодня-завтра:

$ calendar 
Jan 20  George Burns born, 1898
Jan 20  St. Agnes Eve (Ah, bitter chill it was...)
Jan 21  Lenin died, 1924
Jan 21  Thomas Jonathan "Stonewall" Jackson born in Clarksburg, VA, 1824
Jan 21  День инженерных войск

В Debian (и Ubuntu) есть предустановленный список праздников разных стран, который хранится в файлах в папке /usr/share/calendar/. Его можно дополнять, редактировать, и выбирать, праздники каких стран нас интересуют. Для этого достаточно изменить файл calendar.all, но все редактируемые файлы желательно перенести в /etc/calendar, от dpkg подальше.

Однако, у меня обнаружилась бага: в части файлов названия месяцев были записаны по-русски, а программа их не понимала и считала, что этот праздник должен быть каждый месяц :-)

Конечно, это легко исправить - достаточно поменять названия месяцев с русского на английский. В этом нам поможет sed - достаточно перейти в папку с проблемными файлами и выполнить такую команду:

sed -i 's/янв\.\?/Jan/;s/фев\.\?/Feb/;s/мар\.\?/Mar/;s/апр\.\?/Apr/;s/май\.\?/May/;s/июн\.\?/Jun/;s/июл\.\?/Jul/;s/авг\.\?/Aug/;s/сен\.\?/Sep/;s/окт\.\?/Oct/;s/ноя\.\?/Nov/;s/дек\.\?/Dec/;' *

Файлы с русскими праздниками лежат в папке /usr/share/calendar/ru_RU/, а перенести их желательно в папку /etc/calendar/ru_RU/:

mv -r /usr/share/calendar/ru_RU/ /etc/calendar/

Команды выполнять, конечно, от root'а :-)