sudo apt-get clean
освободило достаточно места в корневом каталоге для обновления. При очистке кеша у меня было 1,3 ГБ, перескочившее до 7 ГБ.
С помощью GNU sed
и GNU date
:
sed -En 's#^Password=.*@([0-9]{2})([0-9]){2}$#date -d "\2/\1 +10 days" +%F#ep'
Мы превращаем 2507 в 07/25, поскольку GNU date
ожидает даты в стиле США. Однако обратите внимание, что 07/25 понимается как 25 июля текущего года.
Это означает, что если вы запустите эту команду 2017-01-02 на Password=x@2712
, то получите 2018-01-06
(через 10 дней после 27 декабря 2017).
Вместо этого можно сделать следующее:
eval "$(date +'d=%d m=%m y=%Y')"
awk -v "y=$y" -v "today=-$m-$d" -F @ '
/^Password=.*@[0-9]{4}$/ {
d = "-" substr($NF, 3) "-" substr($NF, 1, 2)
d = (d > today ? y - 1 : y) d
system("date -d \"" d " +10 days\" +%F");
}'
В eval "$(date +'d=%d m=%m y=%Y')"
мы получаем date для вывода текущей даты в формате d=25 m=07 y=2016
. Мы берем это и оцениваем как код оболочки, чтобы установить переменные оболочки $d
, $m
и $y
. Это лучше, чем выполнять d=$(date+%d) m=$(date+%m) y=$(date+%Y)
, так как выполняется только одна команда date
и позволяет избежать проблемы, когда эта команда выполняется в 23:59:59.9 в последний день месяца.
Затем мы запускаем awk
, при этом переменная y
awk устанавливается на содержимое переменной оболочки $y
(2017
), а today
устанавливается на -01-02
.
В awk
, если текущая запись соответствует регулярному выражению ^Password=.*@[0-9]{4}$
. То есть если она начинается с Password=
и заканчивается @
, за которым следуют 4 десятичные цифры, то мы:
Извлекаем дату в этих последних 4 цифрах и сохраняем ее в переменной d
как -mm-dd
, как для today
.
Если d
лексически больше, чем today
, например, в нашем примере выше -12-27
больше, чем -01-02
, то мы устанавливаем d
на предыдущий год (2016-12-27
), и на текущий год в противном случае.
Затем выполняем команду date -d "2016-12-27 +10 дней" +%F
. В предположении GNU date
это означает печать в формате %F
(то есть YYYY-MM-DD
) даты, указанной 2016-12-27 +10 дней
, то есть через 10 дней после 2016-12-27.