Rechercher un programme comme tail
ou less
qui me permet de consulter mes journaux sans lignes contenant une certaine chaîne. Par exemple, affichez mon journal système sans les lignes d'entrée UFW ([UFW BLOCK]
).
L'option d'inversion de correspondance de modèle -v
pour grep
est vraiment utile pour cela:
grep -v 'UFW BLOCK' /var/log/syslog
Cela vous montrera toutes les lignes ne contenant pas UFW BLOCK
. Comme grep
utilise des expressions régulières de base par défaut, l'inclusion des crochets permettra de rechercher tous les caractères individuels de 'UFW BLOCK', y compris l'espace. Vous allez probablement vous retrouver sans sortie. Si vous devez vous assurer qu'il y a des crochets autour de la chaîne, écartez-les \[UFW BLOCK\]
ou utilisez l'option -F
de grep
pour inclure uniquement les chaînes fixes (Merci à Zanna et Steeldriver pour le conseil à ce sujet):
grep -Fv '[UFW BLOCK]' /var/log/syslog
Vous pouvez faciliter la visualisation en dirigeant la sortie vers un pager tel que less
name__:
grep -v 'UFW BLOCK' /var/log/syslog | less
Ou redirigez la sortie vers un fichier de votre répertoire personnel pour une consultation ultérieure:
grep -v 'UFW BLOCK' /var/log/syslog > ~/filtered_syslog
Vous pouvez également utiliser la commande sed
de d
's pour supprimer les lignes avec le motif du flux:
sed '/\[UFW BLOCK\]/d' /var/log/syslog
Nous échappons à []
car ils désignent normalement une classe de caractères, ce qui signifie "correspond à tout ce qui se trouve à l'intérieur"
Vous pouvez utiliser n'importe quel outil doté de fonctionnalités d'édition. Vous avez déjà reçu des solutions utilisant grep
et sed
, voici quelques autres choix. Tous ces éléments peuvent facilement être redirigés vers less
ou more
ou toute autre chose.
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
awk
awk '!/\[UFW BLOCK\]/' file
Vous pouvez aussi utiliser awk
:
awk '!/PATTERN/' log
Je l'utilise quand j'ai plus d'un "motif" et que je ne veux pas utiliser deux grep
comme:
... | grep -v foo | grep -v bar
dont la syntaxe est la suivante:
awk '!/PATTERN/ && !/PATTERN2/' log
Avec l'option &
de la commande less
, il est possible de filtrer pour afficher uniquement le modèle correspondant souhaité, comme indiqué ci-dessous,
& /PATTERN/
dans votre cas, si vous souhaitez que les lignes de filtrage avec UFW BLOCK
ne s'affichent pas dans la sortie, vous pouvez simplement utiliser &!
comme ci-dessous:
&! /UFW BLOCK/