Вы можете grep
до 'T'
echo 2017-03-08T19:41:26Z | grep -Eo "[^T]+" | head -1
Последний день текущего месяца должен быть:
$ date -d "$(date +%Y-%m-01) +1 month -1 day"
Mon Jul 31 00:00:00 CEST 2017
Мой самый короткий:
awk '{a=system("date -d \"$(date +%Y-%m-01) +1 month -1 day\" +%d")}END{print a}'
Попробуйте это:
month=$(cal 07 2017)
lastday=${month: -24: 2}
echo $lastday
Я использую функцию календаря, чтобы загрузить в переменную «месяц» все дни месяца, а затем выбрать последние два символа. Пример относится к июлю 2017 года, но он работает и с месяцем/годом.
lastday=$(cal 07 2017|awk 'END{print day};{if (NF>0){day=$NF}}')
Выбирается значение последнего дня из последней строки календаря, игнорируя пустые строки.
Чуть короче:
lastday=$(cal 07 2017|awk 'END{print day};{NF>0 && day=$NF}')
Просто используйте строку формата для внешнего вызоваdate
:
$ date -d "-$(date +%d) days +1 month" +%d
31