Comment exclure des modèles, des fichiers et des répertoires avec grep

0
59
fatmawati achmad zaenuri/Shutterstock.com

Depuis 1974, la commande Linux grep aide les gens à trouver des chaînes dans des fichiers. Mais parfois, grep est tout simplement trop minutieux. Voici plusieurs façons de dire à grep d'ignorer différentes choses.

La commande grep

La commande grep recherche des fichiers texte à la recherche de chaînes correspondant à la modèles de recherche que vous fournissez sur la ligne de commande. La puissance de grep réside dans son utilisation d'expressions régulières. Ceux-ci vous permettent de décrire ce que vous recherchez, plutôt que d'avoir à le définir explicitement.

La naissance de grep est antérieure à Linux. il a été développé au début des années 1970 sur Unix. Il tire son nom de la séquence de touches g/re/p dans l'éditeur de ligne ed (d'ailleurs, prononcé “ee-dee”). Cela représentait global, rerecherche express régulière, plignes correspondantes.

grep est réputé, peut-être, notoirement, minutieux et déterminé . Parfois, il recherchera des fichiers ou des répertoires sur lesquels vous préféreriez qu'il ne perde pas son temps, car les résultats peuvent vous empêcher de voir le bois pour les arbres.

RELATEDComment utiliser la commande grep sous Linux

Bien sûr, il existe des moyens de maîtriser grep. Vous pouvez lui dire d'ignorer les modèles, les fichiers et les répertoires afin que grep effectue ses recherches plus rapidement et que vous ne soyez pas submergé de faux positifs sans signification.

Exclusion de modèles

Pour effectuer une recherche avec grep, vous pouvez y diriger l'entrée d'un autre processus tel que cat , ou vous pouvez fournir un nom de fichier comme dernier paramètre de ligne de commande.

Nous utilisons un court fichier contenant le texte du poème Jabberwocky, de Lewis Carroll. Dans ces deux exemples, nous recherchons des lignes qui correspondent au terme de recherche “Jabberwock.”

cat jabberwocky.txt | grep “Jabberwock” grep “Jabberwock” jabberwocky.text

Les lignes qui contiennent des correspondances avec l'indice de recherche sont répertoriées pour nous, avec l'élément correspondant dans chaque ligne surligné en rouge. C'est une recherche simple. Mais que se passe-t-il si nous voulons exclure les lignes contenant le mot “Jabberwock” et imprimer le reste ?

Nous pouvons accomplir cela avec l'option -v (inverser la correspondance). Ceci répertorie les lignes qui ne correspondent pas au terme de recherche.

grep -v “Jabberwock” jabberwocky.text

< /p>

Les lignes qui ne contiennent pas “Jabberwock” sont répertoriés dans la fenêtre du terminal.

Nous pouvons exclure autant de termes que nous le souhaitons. Filtrons toutes les lignes contenant “Jabberwock” et toutes les lignes contenant “et.” Pour ce faire, nous allons utiliser l'option -e (expression). Nous devons l'utiliser pour chaque modèle de recherche que nous utilisons.

grep -v -e “Jabberwock” -e “and” jabberwocky.txt

Il y a une baisse correspondante du nombre de lignes dans la sortie.

Si nous utilisons l'option -E (expressions régulières étendues), nous pouvons combiner les modèles de recherche avec “|& #8220;, qui dans ce contexte n'indique pas un tube, c'est l'opérateur logique OU.

grep -Ev “Jabberwock|and” jabberwocky.txt

Nous obtenons exactement le même résultat qu'avec la commande précédente plus longue.

Le format de la commande est le même si vous souhaitez utiliser un modèle regex au lieu d'un indice de recherche explicite. Cette commande exclura toutes les lignes commençant par n'importe quelle lettre dans l'ensemble de “ACHT.”

grep -Ev “^ACHT” jabberwocky.txt

Pour voir les lignes qui contiennent un motif mais qui ne contiennent pas non plus d'autre motif, nous pouvons diriger grep vers grep . Nous allons rechercher toutes les lignes contenant le mot “Jabberwock” puis filtrez toutes les lignes qui contiennent également le mot “slain.”

grep “Jabberwock” jabberwocky.txt | grep -v “slain”

Exclure des fichiers

Nous pouvons demander à grep de rechercher une chaîne ou un motif dans une collection de fichiers. Vous pouvez répertorier chaque fichier sur la ligne de commande, mais avec de nombreux fichiers, cette approche ne s'adapte pas.

grep “vorpal” verset-1.txt verset-2.txt verset-3.txt verset-4.txt verset-5.txt verset-6.txt

Notez que le nom du fichier contenant la ligne correspondante est affiché au début de chaque ligne de sortie.

Pour réduire la saisie, nous pouvons utiliser des caractères génériques. Mais cela peut être contre-intuitif. Cela semble fonctionner.

grep “vorpal” *.txt

Cependant, dans ce répertoire, il existe d'autres fichiers TXT, qui n'ont rien à voir avec le poème. Si nous recherchons le mot “épée” avec la même structure de commande, on obtient beaucoup de faux positifs.

grep “sword” *.txt

Les résultats que nous voulons sont masqués par le déluge de faux résultats des autres fichiers qui ont l'extension TXT.

Le mot “vorpal” ne correspondait à rien, mais “épée” est inclus dans le mot “mot de passe” il a donc été trouvé plusieurs fois dans certains pseudo-fichiers journaux.

Nous devons exclure ces fichiers. Pour ce faire, nous allons utiliser l'option –exclude. Pour exclure un seul fichier nommé “vol-log-1.txt” nous utiliserons cette commande :

grep –exclude=vol-log-1.txt “sword” *.txt

Dans ce cas, nous souhaitons exclure plusieurs fichiers journaux dont les noms commencent par "vol." La syntaxe dont nous avons besoin est :

grep –exclude=vol*.txt “sword” *.txt

Lorsque nous utilisons l'option -R (déréférencement-récursif), grep recherchera pour nous des arbres de répertoires entiers. Par défaut, il recherchera dans tous les fichiers de ces emplacements. Il se peut que nous souhaitions exclure plusieurs types de fichiers.

Sous le répertoire actuel sur cette machine de test, il y a des répertoires imbriqués contenant des fichiers journaux, des fichiers CSV et des fichiers MD. Ce sont tous les types de fichiers texte que nous voulons exclure. Nous pourrions utiliser une option –exclude pour chaque type de fichier, mais nous pouvons obtenir ce que nous voulons plus efficacement en regroupant les types de fichiers.

Cette commande exclut tous les fichiers qui ont des extensions CSV ou MD, et tous les TXT les fichiers dont le nom commence par “vol” ou “log.”

grep -R –exclude=*.{csv,md} –exclude={vol*,log*}.txt “épée” /home/dave/données/

Exclusion de répertoires

Si les fichiers que nous voulons ignorer sont contenus dans des répertoires et qu'il n'y a aucun fichier dans ces répertoires que nous voulons rechercher, nous pouvons exclure ces répertoires entiers répertoires.

Le concept est très similaire à celui de l'exclusion de fichiers, sauf que nous utilisons l'option –exclude-dir et nommons les répertoires à ignorer.

grep -R –exclude-dir= sauvegarde “vorpal” /home/dave/data

Nous avons exclu la “sauvegarde” répertoire, mais nous cherchons toujours dans un autre répertoire appelé “backup2.

Il ne sera pas surprenant que nous puissions utiliser le –exclude-dir option plusieurs fois dans une seule commande. Notez que le chemin d'accès aux répertoires exclus doit être donné par rapport au répertoire dans lequel la recherche commencera. N'utilisez pas le chemin absolu à partir de la racine du système de fichiers.

grep -R –exclude-dir=backup –exclude-dir=backup2 “vorpal” /home/dave/data

Nous pouvons également utiliser des regroupements. Nous pouvons réaliser la même chose plus succinctement avec :

grep -R –exclude-dir={backup,backup2} “vorpal” /home/dave/data

Vous pouvez combiner des exclusions de fichiers et de répertoires dans la même commande. Si vous souhaitez exclure tous les fichiers d'un répertoire et exclure certains types de fichiers des répertoires recherchés, utilisez cette syntaxe :

grep -R –exclude=*.{csv,md} –exclude-dir= sauvegarde/archivage “frumious” /home/dave/data

Parfois ça 8217;ce que vous laissez de côté

Parfois, avec grep, vous pouvez avoir l'impression d'essayer de trouver une aiguille dans une botte de foin. cela fait une grande différence de supprimer la botte de foin.

RELATED : Comment utiliser les expressions régulières (regexes) sous Linux

LIRE LA SUITE < ul id="nextuplist">

  • &rsaquo ; Ces vampires cachés de la bande passante dévorent votre plafond de données à la maison
  • › Qu'est-ce que le mAh et comment affecte-t-il les batteries et les chargeurs ?
  • › Examen du moniteur INNOCN Ultrawide 40 pouces 40C1R : une énorme affaire avec quelques compromis
  • &rsaquo ; Comment utiliser iMessage sur Android et Windows
  • › 10 fonctionnalités Samsung Galaxy que vous devriez utiliser
  • › Nouveautés de Chrome 103, disponible dès maintenant