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

Mike
la source

Réponses:

15

essayer

tail -f log.txt | egrep 'WARN|ERROR'
Doug Harris
la source
2
+1 grep -Efonctionne également.
Quack Quichotte
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)"
Chris Johnsen
la source
0

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

tail -f log.txt | grep 'WARN\|ERROR'
Dennis Williamson
la source
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