Afficher les fichiers sans lignes avec une certaine chaîne

12

Recherche d'un programme comme tailou lessqui m'a permis de visualiser mes journaux sans lignes contenant une certaine chaîne. Par exemple, affichez mon syslog sans [UFW BLOCK]lignes d'entrée UFW ( ).

John Gr.
la source
Bien qu'il ne soit pas facile de fournir une solution à votre description exacte du problème avec cette fonctionnalité, vous serez peut-être intéressé de savoir qu'il lessoffre la possibilité de filtrer les lignes affichées après un modèle d'expression régulière. Vous pouvez utiliser cette fonctionnalité en tapant &suivi du motif, et vous pouvez le rétablir en tapant &seul.
Aaron

Réponses:

13

L'option d'inversion de correspondance de modèle -vpour grepest vraiment utile pour cela:

grep -v 'UFW BLOCK' /var/log/syslog

Cela vous montrera toutes les lignes ne contenant pas UFW BLOCK. Comme greputilise les expressions régulières de base par défaut, l'inclusion des crochets lui fera rechercher n'importe lequel des caractères individuels de 'BLOC UFW' y compris l'espace. Vous vous retrouverez probablement sans sortie. Si vous devez vous assurer qu'il y a des crochets autour de la chaîne, échappez-les \[UFW BLOCK\]ou utilisez l' -Foption d' grepinclure uniquement les chaînes fixes (Merci à Zanna et Steeldriver pour les conseils à ce sujet):

grep -Fv '[UFW BLOCK]' /var/log/syslog

Vous pouvez faciliter la visualisation en canalisant la sortie vers un pager comme less:

grep -v 'UFW BLOCK' /var/log/syslog | less

Ou redirigez la sortie vers un fichier de votre répertoire personnel pour une visualisation ultérieure:

grep -v 'UFW BLOCK' /var/log/syslog > ~/filtered_syslog
Arronical
la source
2
Vous pouvez également utiliser la fgrepcommande équivalente à grep -F.
Tulains Córdova
2
@ TulainsCórdova grep's man dit que "l'invocation directe en tant qu'egrep ou fgrep est déconseillée, mais est fournie pour permettre aux applications historiques qui s'appuient sur elles de s'exécuter sans modification". Je ne sais pas s'ils vont jamais agir sur cette dépréciation, mais je suppose que l'utilisation de ces commandes n'est pas la meilleure pratique
Aaron
5

Vous pouvez également utiliser sedla dcommande de pour supprimer les lignes avec le motif du flux:

sed '/\[UFW BLOCK\]/d' /var/log/syslog

Nous nous échappons []car ils désignent normalement une classe de caractères, ce qui signifie "faire correspondre tout ce qui se trouve ici"

Zanna
la source
5

Vous pouvez utiliser n'importe quel outil avec des capacités d'édition. Vous avez déjà reçu des solutions en utilisant grepet sed, voici quelques autres choix. Tous ces éléments peuvent facilement être raccordés à lessou moreou autre chose.

  1. Perl

    perl -ne 'print unless /\[UFW BLOCK\]/' /var/log/syslog
    

    Puisque c'est Perl, TIMTOWDI! .

    perl -pe '$_="" if /\[UFW BLOCK\]/' /var/log/syslog
    perl -ne '/\[UFW BLOCK\]/ || print' /var/log/syslog
    perl -ne 'print if !/\[UFW BLOCK\]/' /var/log/syslog
    perl -ne '!/\[UFW BLOCK\]/ && print' /var/log/syslog
    perl -ne '/\[UFW BLOCK\]/ ? "" : print' /var/log/syslog
    
  2. awk

    awk '!/\[UFW BLOCK\]/' file
    
terdon
la source
2

Vous pouvez awkégalement utiliser :

awk '!/PATTERN/' log

Je l'utilise quand j'ai plus d'un "motif" et je ne veux pas en utiliser deux grepcomme:

... | grep -v foo | grep -v bar

dont la syntaxe est:

awk '!/PATTERN/ && !/PATTERN2/' log
Ravexina
la source
"Je l'utilise quand j'ai plus d'un" pattern "et je ne veux pas utiliser deux grep comme" ------ grep -Ev "foo|bar"?
αғsнιη
Vous pouvez également utiliser -epour définir plusieurs modèles. grep -v -e 'foo' -e 'bar'
Arronical
@AFSHIN (Je ne sais pas comment mon commentaire est supprimé), je voulais dire pour une logique et non ou;)
Ravexina
1

Avec lessl' &option de la commande, il est possible de filtrer pour afficher uniquement le motif correspondant souhaité comme ci-dessous,

& /PATTERN/

dans votre cas, si vous souhaitez que les lignes de filtre avec UFW BLOCKne s'affichent pas en sortie, vous pouvez simplement utiliser &!comme ci-dessous:

&! /UFW BLOCK/
αғsнιη
la source