Skip to content

Comment gérer un fichier journal dans une période de temps spécifique

Solution:

egrep '^[^ ]+ (0[89]|1[0-9]|2[012]):'

Une explication détaillée peut être trouvée dans divers didacticiels regex (expression régulière); egrep utilise la syntaxe “POSIX étendu” (man 7 regex).

  • La première ^ signifie “début de ligne”.

  • [^ ]+ correspond simplement au champ de date, quelle que soit la date réelle.

    • [...] signifie “n’importe quel caractère entre les crochets”, donc [89] correspondra soit 8 ou 9; [0-9] est un nombre quelconque, et [^ ] est n’importe quoi sauf un espace (à cause de la ^ entre parenthèses).

    • + signifie “un ou plus du précédent” (par exemple, a+ correspondrait a, aaa, et aaaaaaaa).

    • Donc ^[^ ]+ commencera par le début de la ligne et correspondra à autant de caractères autres que des espaces que possible.

  • (...|...|...) signifie “l’un des modèles donnés”, donc (0[89]|1[0-9]|2[012]) signifie ” soit 0[89] ou 1[0-9] ou 2[012]“. Il correspondra à tous les nombres de 08 à 22.


Une option un peu meilleure est :

awk -F'[: ]' '$2 >= 8 && $2 <= 22 { print }'

Les -F L’option divise chaque ligne en champs séparés selon le [: ] regex (correspondant soit : ou un espace), et le ok le script vérifie la 2ème colonne (l’heure).

Pourquoi s’embêter à utiliser grep ? Vous pouvez simplement utiliser sed.

Exemple:

sed -n '/Jun 17 13:39:54/ , /Jun 18 10:50:28/p' kern.log

Cela imprimera tous les journaux entre June 17 13:39:54 et June 18 10:50:28


Tags : /

Articles Similaires

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *