Eu quero pesquisar o syslog por datas maiores que um padrão de pesquisa específico. Por exemplo, quero encontrar todas as entradas do syslog em que a data seja maior que JAN 6 16:24:00
. Eu sei que poderia usar sed( sed -n '/JAN 6 16:24:00/,$p' ${LOGFILE}
), mas isso só funcionará se existir uma entrada com a data exata que eu especifiquei sed
- se não houver entrada no arquivo de log contendo exatamente JAN 6 16:24:00
, não obterei saída, pois não há lógica real, apenas strings são sendo comparado.
Eu sei, journalctl --since "XXX"
mas isso pode ser executado em um host que não é baseado em SystemD, mas basicamente eu preciso dessa funcionalidade.
Existe uma maneira de imprimir todas as entradas em um arquivo de log que são mais recentes do que a data X
suposta que o arquivo de log não contém X
usando ferramentas GNU "clássicas"?
Se seus logs foram formatados em um formato mais útil, como:
Você poderia fazer:
Mas aqui, é mais complicado, pois essas datas são formatadas usando abreviações do nome do mês em inglês e o ano nem é especificado.
O melhor seria usar um analisador de data que possa entender esse formato de carimbo de data/hora e entender carimbos de data/hora sem ano como sendo um da última ocorrência no passado, como o
Date::Parse
módulo perl:Para datas sem ano,
Date::Parse
'sstr2time
parece fornecer datas no passado, exceto se a data for do mês atual. Por exemplo, se executado em 15 de janeiro de 2022, "2 de fevereiro" seria interpretado como 02/02/2021, enquanto "31 de janeiro" seria interpretado como 31/01/2022.