Explication détaillée peut être trouvée dans divers regex tutoriels (expression régulière); egreputilise la syntaxe "POSIX étendu" ( man 7 regex).
Le premier ^signifie "début de la ligne".
[^ ]+ correspond juste au champ de date, quelle que soit la date réelle.
[...]signifie "n'importe quel caractère entre crochets", donc [89]correspondra à 8ou 9; [0-9]est n'importe quel nombre et [^ ]est tout sauf un espace (à cause des ^crochets intérieurs).
+signifie « un ou plusieurs de la précédente » (par exemple, a+pourrait correspondre a, aaaet aaaaaaaa).
Alors , ^[^ ]+va commencer avec le début de la ligne, et correspondent à autant de caractères non-espace que possible.
(...|...|...)signifie "l'un des motifs 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 numéros de 08 à 22.
Une option un peu meilleure est:
awk -F'[: ]' '$2 >= 8 && $2 <= 22 { print }'
L' -Foption divise chaque ligne en champs séparés selon l' [: ]expression régulière (correspondant soit à :un espace), et le script awk vérifie la 2e colonne (l'heure).
Je pense que l'OP veut tous les journaux entre 8h et 23h, uniquement ceux d'une journée spécifique.
Dennis
1
Il peut le faire aussi. Par exemple: sed -n '/ 2012-3-06 11:34:48 /, / 2012-3-06 16: 34: 48 / p' logfile.name
Nima G
1
Coquine typo. Je voulais dire: pas ceux d'un jour spécifique.
Dennis
2
Le problème avec cette approche est qu'il doit y avoir une ligne dans le fichier journal avec cet horodatage. Dans l'exemple ci-dessus, s'il n'y a pas de ligne avec l'horodatage 2012-03-06 11:34:48, alors rien ne s'imprimera. L'approche awk ci-dessus fonctionnerait pour de tels cas (c'est-à-dire que vous voulez tous les journaux avec une heure entre 8 et 11, mais vous ne savez pas s'il y a une entrée de journal au moment 2012-03-06 08:00:00 ou quoi que ce soit pour cela heure du tout).
user650654
0
Il existe en fait un moyen beaucoup plus simple de procéder.
notchef est une option qui est transmise à l'outil pour lui dire quoi faire. Dans ce cas particulier, il indique à l'outil le type de fichier journal /tmp/client.log.
/tmp/client.log est bien sûr le fichier journal.
2016-05-08_19: 12: 00,2016-05-08_21: 13: 00 est la plage de dates à partir du journal que vous souhaitez numériser
"INFO" est l'une des chaînes qui se trouve dans les lignes de journaux qui vous intéressent.
"a2ensite" est une autre chaîne sur la même ligne sur laquelle vous vous attendez à trouver la chaîne "INFO". La spécification de ces deux chaînes (INFO et a2ensite) isole et traite les lignes que vous voulez beaucoup plus rapidement, en particulier si vous avez affaire à un énorme fichier journal.
5 spécifie Avertissement. En spécifiant 5, vous dites au programme d'alerter comme AVERTISSEMENT s'il y a au moins 5 occurrences des chaînes de recherche que vous avez spécifiées
10 spécifie Critique. En spécifiant 10, vous dites au programme d'alerter comme CRITIQUE s'il y a au moins 10 occurrences des chaînes de recherche que vous avez spécifiées.
-show spécifie le type de réponse que vous obtiendrez. En spécifiant -shown, vous dites si quelque chose est trouvé qui correspond aux modèles spécifiés, la sortie à l'écran.
Exemple d'exécution:
# ./autodrgrep.kl.sh notchef /tmp/client.log '2016-05-08_19:12:00,2016-05-08_21:13:00' 'INFO' 'a2ensite' 5 10 -show
[2016-05-08 19:12:58-07:00] INFO: Processing template[/usr/sbin/a2ensite] action create (apache2::default line 90)
[2016-05-08 19:12:58-07:00] INFO: Processing execute[a2ensite default] action run (apache2::default line 24)
[2016-05-08 19:12:58-07:00] INFO: execute[a2ensite default] ran successfully
[2016-05-08 19:13:09-07:00] INFO: Processing execute[a2ensite nagios3.conf] action run (logXrayServer::install line 24)
[2016-05-08 19:13:12-07:00] INFO: execute[a2ensite default] sending restart action to service[apache2] (delayed)
[2016-05-08 19:42:57-07:00] INFO: Processing template[/usr/sbin/a2ensite] action create (apache2::default line 90)
[2016-05-08 19:42:57-07:00] INFO: Processing execute[a2ensite default] action run (apache2::default line 24)
[2016-05-08 19:42:57-07:00] INFO: execute[a2ensite default] ran successfully
[2016-05-08 19:43:08-07:00] INFO: Processing execute[a2ensite nagios3.conf] action run (logXrayServer::install line 24)
[2016-05-08 19:43:11-07:00] INFO: execute[a2ensite default] sending restart action to service[apache2] (delayed)
[2016-05-08 20:12:58-07:00] INFO: Processing template[/usr/sbin/a2ensite] action create (apache2::default line 90)
[2016-05-08 20:12:58-07:00] INFO: Processing execute[a2ensite default] action run (apache2::default line 24)
[2016-05-08 20:12:58-07:00] INFO: execute[a2ensite default] ran successfully
[2016-05-08 20:13:10-07:00] INFO: Processing execute[a2ensite nagios3.conf] action run (logXrayServer::install line 24)
[2016-05-08 20:13:12-07:00] INFO: execute[a2ensite default] sending restart action to service[apache2] (delayed)
[2016-05-08 20:42:59-07:00] INFO: Processing template[/usr/sbin/a2ensite] action create (apache2::default line 90)
[2016-05-08 20:42:59-07:00] INFO: Processing execute[a2ensite default] action run (apache2::default line 24)
[2016-05-08 20:42:59-07:00] INFO: execute[a2ensite default] ran successfully
[2016-05-08 20:43:09-07:00] INFO: Processing execute[a2ensite nagios3.conf] action run (logXrayServer::install line 24)
[2016-05-08 20:43:12-07:00] INFO: execute[a2ensite default] sending restart action to service[apache2] (delayed)
[2016-05-08 21:12:59-07:00] INFO: Processing template[/usr/sbin/a2ensite] action create (apache2::default line 90)
[2016-05-08 21:12:59-07:00] INFO: Processing execute[a2ensite default] action run (apache2::default line 24)
[2016-05-08 21:12:59-07:00] INFO: execute[a2ensite default] ran successfully
23
2---78720---23---ATWFILF---(2016-05-08)-(19:12)---(2016-05-08)-(21:13) SEAGM
Que faire si la plage de dates ou le délai spécifié par l'utilisateur n'est pas dans le journal?
Chaque exécution de la commande ci-dessus aura toujours une ligne (dernière ligne de la sortie) qui dit "ATWFILF" ou "ETWNFILF".
ATWFILF signifie que la plage de dates ou l'intervalle de temps que vous avez recherché a été trouvé dans le journal. C'est donc très bien.
ETWNFILF signifie que la plage de dates ou l'intervalle de temps que vous avez recherché n'a pas été trouvé dans le journal. Dans ce cas, l'heure la plus proche de l'heure que vous avez spécifiée sera détectée et utilisée à la place.
^[^ ]+
partie ..Pourquoi s'embêter à utiliser grep? Vous pouvez simplement utiliser sed.
exemple:
Cela imprimera tous les journaux entre
June 17 13:39:54
etJune 18 10:50:28
la source
Il existe en fait un moyen beaucoup plus simple de procéder.
Téléchargement / Documentation: autodrgrep.kl.sh
Commander:
Explication:
autodrgrep.kl.sh est le nom de l'outil.
notchef est une option qui est transmise à l'outil pour lui dire quoi faire. Dans ce cas particulier, il indique à l'outil le type de fichier journal /tmp/client.log.
/tmp/client.log est bien sûr le fichier journal.
2016-05-08_19: 12: 00,2016-05-08_21: 13: 00 est la plage de dates à partir du journal que vous souhaitez numériser
"INFO" est l'une des chaînes qui se trouve dans les lignes de journaux qui vous intéressent.
"a2ensite" est une autre chaîne sur la même ligne sur laquelle vous vous attendez à trouver la chaîne "INFO". La spécification de ces deux chaînes (INFO et a2ensite) isole et traite les lignes que vous voulez beaucoup plus rapidement, en particulier si vous avez affaire à un énorme fichier journal.
5 spécifie Avertissement. En spécifiant 5, vous dites au programme d'alerter comme AVERTISSEMENT s'il y a au moins 5 occurrences des chaînes de recherche que vous avez spécifiées
10 spécifie Critique. En spécifiant 10, vous dites au programme d'alerter comme CRITIQUE s'il y a au moins 10 occurrences des chaînes de recherche que vous avez spécifiées.
-show spécifie le type de réponse que vous obtiendrez. En spécifiant -shown, vous dites si quelque chose est trouvé qui correspond aux modèles spécifiés, la sortie à l'écran.
Exemple d'exécution:
Que faire si la plage de dates ou le délai spécifié par l'utilisateur n'est pas dans le journal?
Chaque exécution de la commande ci-dessus aura toujours une ligne (dernière ligne de la sortie) qui dit "ATWFILF" ou "ETWNFILF".
ATWFILF signifie que la plage de dates ou l'intervalle de temps que vous avez recherché a été trouvé dans le journal. C'est donc très bien.
ETWNFILF signifie que la plage de dates ou l'intervalle de temps que vous avez recherché n'a pas été trouvé dans le journal. Dans ce cas, l'heure la plus proche de l'heure que vous avez spécifiée sera détectée et utilisée à la place.
la source