Eu quero obter todas as linhas entre dois timestamps de / var / log / messages. Eu só tenho hora de início que eu forneço ao meu script como entrada. O roteiro deveria me pegar todas as linhas até o dia seguinte como saída. Eu tentei isso -
startDate=$1
toDate='date -d "${startDate}+1day"'
sed -n '/${startDate}/ , /${toDate}/p' messages*
No entanto, encontrei um problema com essa abordagem quando o padrão $toDate
não foi encontrado nos logs de mensagens. Então eu modifiquei meu código para isso -
startDate=$1
toDate='date -d "${startDate}+1day"'
until [ 'grep -Fxq ${toDate} messages*' ];
do
echo ${toDate}
epoch='date -d "${toDate}" +%s'
new_epoch=$(($epoch+1))
next_ts='date -d "1970-01-01 ${new_epoch} sec"'
toDate=${next_ts:4:15}
done
sed -n '/${startDate}/ , /${toDate}/p' messages*
Agora, estou tendo uma data difícil para correspondência nos registros.
Para minha entrada de Nov 6 07:17:04 UTC 2017
, o código gera a próxima data como Nov 7 07:17:04
. Observe que os carimbos de data / hora reais nos logs de mensagens contêm dois espaços entre o nome do mês e as datas do dígito único. Então eu não sou capaz de igualar a string.
Existe alguma maneira em torno disso? Eu quero que o script funcione com datas de dois dígitos (como 10) também.