Как в вчерашней оболочке получить вчерашнюю дату в переменной?

У меня есть скрипт оболочки, который выполняет следующее для сохранения даты текущего дня в переменной 'dt':

date "+%a %d/%m/%Y" | read dt
echo ${dt}

Как бы я собираюсь получить дату вчерашнего дня в переменную?

По сути, я пытаюсь добиться использования grep для извлечения всех вчерашних строк из файла журнала, поскольку каждая строка в журнале содержит дата в формате «Пн 01.02.2010».

Большое спасибо

37
задан Wolph 19 August 2010 в 02:12
поделиться

7 ответов

Если у вас есть 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
12
ответ дан 27 November 2019 в 03:59
поделиться

У вас есть как минимум 2 варианта

  1. Используйте perl:

     perl -e '@ T = localtime (time-86400); printf ("% 02d /% 02d /% 02d", $ T [4] + 1, $ T [3], $ T [5] +1900) '
    
  2. Установить дату GNU (она находится в пакете sh_utils , если я правильно помню)

     дата - дата вчера "+% a% d /% m /% Y" | читать dt
    эхо $ {dt}
    
  3. Не уверен, работает ли это, но вы можете использовать отрицательный часовой пояс. Если вы используете часовой пояс, который на 24 часа раньше текущего часового пояса, вы можете просто использовать дату .

4
ответ дан 27 November 2019 в 03:59
поделиться

Если вы используете Mac, BSD или что-то еще без опции --date, вы можете использовать:

date -r `expr \`date +%s\` - 86400` '+%a %d/%m/%Y'

Update : или, возможно ...

date -r $((`date +%s` - 86400)) '+%a %d/%m/%Y'
9
ответ дан 27 November 2019 в 03:59
поделиться

Всем спасибо за помощь, но поскольку я использую HP-UX (в конце концов: чем больше вы платите, тем меньше возможностей вы получаете ...), мне пришлось прибегнуть к perl:

perl -e '@T=localtime(time-86400);printf("%02d/%02d/%04d",$T[3],$T[4]+1,$T[5]+1900)' | read dt
2
ответ дан 27 November 2019 в 03:59
поделиться

Если в вашей установке HP-UX установлен Tcl, вы можете обнаружить, что арифметика даты очень удобочитаема (к сожалению, в оболочке Tcl нет красивой опции «-e», такой как perl):

dt=$(echo 'puts [clock format [clock scan yesterday] -format "%a %d/%m/%Y"]' | tclsh)
echo "yesterday was $dt"

Это будет обрабатывать все летнее время беспокоить.

2
ответ дан 27 November 2019 в 03:59
поделиться

В Linux вы можете использовать

date -d "-1 days" +"%a %d/%m/%Y"
48
ответ дан 27 November 2019 в 03:59
поделиться
dt=$(date --date yesterday "+%a %d/%m/%Y")
echo $dt
66
ответ дан 27 November 2019 в 03:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: