Faire une recherche avec la commande grep sous Linux

Exemples de recherches et syntaxes de la commande grep sous Linux

Recherche du mot "openntpd", sans tenir compte de la casse (majuscule et minuscule), en affichant les numéros de lignes et en affichant les 4 lignes qui précèdent et succèdent le résultat :

grep -i -n -4 "openntpd"
Lien vers le fichier : cliquez ici Copier le code

Exemple appliqué sur la recherche de processus openntpd :

ps aux --forest | grep --color=always -i -n -4 "openntpd"
Lien vers le fichier : cliquez ici Copier le code

Pour rechercher un mot ou une ligne dans les fichiers d'un répertoire (et ses sous-répertoires, option -r pour la récursivité) en ignorant les binaires comme les jpg, png et autres (option -I)

grep -r -I -i motrecherché /répertoire/de/recherche
Lien vers le fichier : cliquez ici Copier le code

La même chose avec en plus un filtre sur le type de fichier

grep -r -I -i motrecherché --include="*.php" /répertoire/de/recherche
Lien vers le fichier : cliquez ici Copier le code

Ici on utilise grep pour filtrer les résultats de la commande netstat pour isoler les lignes contenant le mot apache

netstat -tlnpu | grep -i "apache"
Lien vers le fichier : cliquez ici Copier le code

Afficher les lignes du fichier firewall.sh qui ne commencent pas par #
C'est pratique pour ne voir que les éléments actifs/non commentés d'un fichier de configuration

^ indique le début de ligne
[^#] indique qui n'est pas un #

cat firewall.sh | grep "^[^#]"
Lien vers le fichier : cliquez ici Copier le code

On aurait aussi pu faire : toutes les lignes qui commencent par # et le -v demande l'inverse

cat firewall.sh | grep -v '^#'
Lien vers le fichier : cliquez ici Copier le code

En optimisation on peut supprimer les lignes vides à l'aide de awk

cat firewall.sh | grep -v '^#' | awk 'NF'
Lien vers le fichier : cliquez ici Copier le code

En effet NF signifie Number of Fields. C'est une variable interne d'awk qui compte le nombre de champs dans chaque ligne.
awk 'NF' est équivalent à awk 'NF != 0',
Comme le séparateur par défaut est l’espace ou la tabulation, une ligne qui contient au moins un caractère autre que ces séparateurs aura au moins un champ (NF ≥ 1).
Les lignes vides ou composées uniquement d’espaces ou tabulations auront NF = 0.
Ainsi, awk 'NF' permet d’afficher uniquement les lignes non vides et non constituées uniquement de blancs.

Toujours en techniques pour supprimer les lignes vides on aurait aussi pu faire

cat firewall.sh | grep -v '^#' | grep -v '^$'
Lien vers le fichier : cliquez ici Copier le code

Car ^ est le caractère de début de ligne et $ est le caractère de fin de ligne. Coller ces 2 caractères revient à désigner une ligne complètement vide. C'est moins efficace qu'awk 'NF' qui supprime également les lignes vides contenant des espaces et des tabulations.

A propos de cette dernière commande, on aurait pu simplifier grep -v '^#' | grep -v '^$' en écrivant

grep -Ev '^$|^#'
Lien vers le fichier : cliquez ici Copier le code
  • -E active les expressions régulières étendues. Sans cela grep utilise les expressions régulières de base (Basic Regular Expressions) où le caractère | (pipe) n'est pas interprété comme un opérateur logique "OU", mais comme un caractère littéral.
  • -v fait une recherche inversée (ne pas afficher les lignes qui correspondent à)


grep -Ev '^$|^#' demande donc à ne pas afficher les lignes qui sont complètements vides | (ou) les lignes qui commencent par un #.

Afficher et coloriser les lignes de /var/log/syslog qui contiennent iptables,DPT ou SRC

tail -f /var/log/syslog | egrep  -wi --color "(iptables|DPT|SRC)"
Lien vers le fichier : cliquez ici Copier le code

Ceci aussi permet de mettre de la couleurs sur certains mots

tail -f /var/log/syslog | grep --color=always -i "DPT\|SRC\|DST"
Lien vers le fichier : cliquez ici Copier le code
Publicité