Utilisation simple de tail & grep. Conditions multiples


6

Toutes mes excuses pour mon ignorance, je suis assez novice dans ce domaine.

J'essaie de lire un fichier journal en cours d'écriture par un simple démon. Ce que je voudrais faire est de filtrer ma sortie "en direct" sur certains "multiples" types.

Mes types sont: DEBUG|INFO|WARN|ERROR|FATAL

C’est ce que j’ai eu jusqu’à présent, et cela fonctionne pour un cas, je ne peux pas le faire fonctionner pour plusieurs cas.

tail -f log.txt | grep INFO

J'ai essayé une couple de choses pour essayer de dire que je veux « WARN« s et ERRORd » » mais rien ne fonctionne vraiment pour moi. Comment pourrais-je corriger cela?

Merci

Réponses:



2

En plus de passer à egrep/ grep -Epour obtenir l'opérateur d'alternance d'expressions régulières étendues, vous pouvez également utiliser plusieurs -earguments pour des expressions régulières grepou même fgrep/grep -F

En fait, si vos recherches sont toutes des chaînes statiques (comme la question initiale), vous pouvez même «rétrograder» jusqu’à fgrep/, grep -Fce qui pourrait donner un coup de pouce à la vitesse (puisqu’il effectue toujours des comparaisons directes de chaînes sans expressions rationnelles).

fgrep -e DEBUG -e INFO -e WARN -e ERROR -e FATAL

De plus, POSIX permet de séparer les motifs par des nouvelles lignes.

# bash-ish to put a newlines into the string
fgrep $'DEBUG\nINFO\nWARN\nERROR\nFATAL'

# Standard syntax, but easier to break while editing(?):
fgrep "$(for f in DEBUG INFO WARN ERROR FATAL; do echo "$f"; done)"

0

Cela fonctionne aussi (régulier grepet échappe au caractère pipe):

tail -f log.txt | grep 'WARN\|ERROR'

C'est une extension GNU à la syntaxe des expressions régulières de base, cela ne fonctionnera probablement pas pour les greps non-GNU. Il est plus facile d'utiliser egrepou grep -Eet le marqueur d'alternance non échappé (tuyau).
Chris Johnsen
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.