У меня есть скрипт оболочки, который выполняет следующее для сохранения даты текущего дня в переменной 'dt':
date "+%a %d/%m/%Y" | read dt
echo ${dt}
Как бы я собираюсь получить дату вчерашнего дня в переменную?
По сути, я пытаюсь добиться использования grep для извлечения всех вчерашних строк из файла журнала, поскольку каждая строка в журнале содержит дата в формате «Пн 01.02.2010».
Большое спасибо
Если у вас есть Perl (и ваша дата
не имеет хороших функций вроде вчера
), вы можете использовать:
pax> date
Thu Aug 18 19:29:49 XYZ 2010
pax> dt=$(perl -e 'use POSIX;print strftime "%d/%m/%Y%",localtime time-86400;')
pax> echo $dt
17/08/2010
У вас есть как минимум 2 варианта
Используйте perl:
perl -e '@ T = localtime (time-86400); printf ("% 02d /% 02d /% 02d", $ T [4] + 1, $ T [3], $ T [5] +1900) '
Установить дату GNU (она находится в пакете sh_utils
, если я правильно помню)
дата - дата вчера "+% a% d /% m /% Y" | читать dt
эхо $ {dt}
Не уверен, работает ли это, но вы можете использовать отрицательный часовой пояс. Если вы используете часовой пояс, который на 24 часа раньше текущего часового пояса, вы можете просто использовать дату
.
Если вы используете Mac, BSD или что-то еще без опции --date, вы можете использовать:
date -r `expr \`date +%s\` - 86400` '+%a %d/%m/%Y'
Update : или, возможно ...
date -r $((`date +%s` - 86400)) '+%a %d/%m/%Y'
Всем спасибо за помощь, но поскольку я использую HP-UX (в конце концов: чем больше вы платите, тем меньше возможностей вы получаете ...), мне пришлось прибегнуть к perl:
perl -e '@T=localtime(time-86400);printf("%02d/%02d/%04d",$T[3],$T[4]+1,$T[5]+1900)' | read dt
Если в вашей установке HP-UX установлен Tcl, вы можете обнаружить, что арифметика даты очень удобочитаема (к сожалению, в оболочке Tcl нет красивой опции «-e», такой как perl):
dt=$(echo 'puts [clock format [clock scan yesterday] -format "%a %d/%m/%Y"]' | tclsh)
echo "yesterday was $dt"
Это будет обрабатывать все летнее время беспокоить.
В Linux вы можете использовать
date -d "-1 days" +"%a %d/%m/%Y"
dt=$(date --date yesterday "+%a %d/%m/%Y")
echo $dt