Comment capturer des journaux ayant une heure ou moins

Je dois créer un script shell de sorte que chaque fois qu’il est exécuté, il passe au fichier journal commun et mis à jour. Ce qui est déjà fait est de sélectionner tous les journaux erronés et de les afficher en sortie. Mais maintenant, je veux que ce soit comme s’il prenait des journaux qui sont certains plus anciens et pas plus.

grep est bon pour récupérer la ligne d’horodatage. Mais comment puis-je le faire pour obtenir uniquement des données fraîches et pas trop anciennes?

grep -i error log.log | grep `date +%Y'-'%m'-'%d` 

Le format du fichier journal est le suivant: ‘[date dans AAAA-mm-jj horodatage] – erreur / exception générée’

Toute aide serait appréciée. Merci d’avance à tous.

C’est un peu compliqué. La date d’il y a 60 minutes aiderait grep à trouver des entrées qui se sont produites il y a exactement 60 minutes, mais cela ne permettrait pas de trouver des choses après cela. Heureusement, awk est bon avec les horodatages:

 awk -F']' -v limit="[`date -d '60 minutes ago' +'%Y-%m-%d %H:%M:%S'`" ' BEGIN {IGNORECASE=1} /error/ && $1 > limit' log.log 

Notez l’utilisation de -F']' pour définir le délimiteur à ] et l’ajout de [ au début de la chaîne de limite d’horodatage. Cela signifie que awk va effectivement comparer les horodatages, y compris leur support d’ouverture, par exemple, "[2016-04-20 17:55:08" , mais ça va, ça fonctionne toujours.

N’aime pas awk? Que diriez-vous:

 start=`date -d '60 minutes ago' '%Y-%m-%d %H:%M:%S'` sort -d <(grep -i error log.log) <(echo "[$start") | sed -n "/$start/,$p" | grep -v "^\[$start$"