Já que você parece ter a implementação GNU de date
, você pode fazer:
</tmp/myfile.log sed -n 's/^.*Expire: //p' | date -f - +%s
Com o GNU sed
(e ainda o GNU date
), você também pode fazer:
</tmp/myfile.log sed -n 's/^.*Expire: /date +%s -d/ep'
(assumindo que POSIXLY_CORRECT não está no ambiente)
Mas cuidado, pois isso equivale a uma vulnerabilidade de injeção de comando se você não puder garantir que o que está depois de qualquer tag Expire:
não é essa data nesse formato. Embora seja mais curto, ele também é muito menos eficiente do que o anterior, pois ele executa um shell e um comando date
para cada linha correspondente (e recupera sua saída por meio de um pipe, para posteriormente reproduzi-lo novamente no stdout).
Em sistemas não-GNU, você pode usar perl
:
</tmp/myfile.log perl -MTime::Piece -lne '
print Time::Piece->strptime($1, "%d-%b-%Y")->epoch if /Expire: (\S+)/'
Ou use o recurso de análise de data do seu shell se estiver usando os recursos avançados, como zsh
( strftime -r
builtin) ou ksh93
( printf %T
).