10 jeux amusants à jouer dans le terminal Linux
Agence web » Actualités du digital » Comment exclure des modèles, des fichiers et des répertoires avec grep

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

Depuis 1974, Linux grep La commande 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 ignorer différentes choses.

La commande grep

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

La naissance de grep est antérieur à 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 le ed éditeur de ligne (d’ailleurs, prononcé « ee-dee »). Cela représentait gglobal, concernantrecherche express régulière, pimprimer les lignes correspondantes.

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

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 termine ses recherches plus rapidement et que vous ne soyez pas submergé de faux positifs sans signification.

Exclusion de motifs

Pour rechercher 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 fichier court qui contient le texte du poème Jabberwocky, de Lewis Caroll. Dans ces deux exemples, nous recherchons des lignes qui correspondent au terme de recherche « Jabberwock ».

cat jabberwocky.txt | grep "Jabberwock"
grep "Jabberwock" jabberwocky.text

Deux façons différentes de rechercher dans le même fichier texte avec grep

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 le -v (inverser la correspondance). Ceci répertorie les lignes qui ne correspondent pas au terme de recherche.

grep -v "Jabberwock" jabberwocky.text

Utilisation de l'option de recherche inversée -v avec grep

Les lignes qui ne contiennent pas « Jabberwock » sont répertoriées dans la fenêtre du terminal.

Toutes les lignes qui ne contiennent pas le mot jabberwock

Nous pouvons exclure autant de termes que nous le souhaitons. Filtrons toutes les lignes qui contiennent « Jabberwock » et toutes les lignes qui contiennent « et ». Pour y parvenir, nous utiliserons le -e option (expression). Nous devons l’utiliser pour chaque modèle de recherche que nous utilisons.

grep -v -e "Jabberwock" -e "and" jabberwocky.txt

Utilisation de plusieurs clauses de recherche avec grep

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

Les lignes du texte qui ne correspondent à aucun des termes de recherche

Si nous utilisons le -E (expressions régulières étendues), nous pouvons combiner les modèles de recherche avec « |« , qui dans ce contexte n’indique pas un tuyau, c’est la logique OR opérateur.

grep -Ev "Jabberwock|and" jabberwocky.txt

Utilisation de l'opérateur logique OU avec grep

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

Les lignes du texte qui ne correspondent à aucun des termes de recherche

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

Exclure les fichiers commençant par des lettres particulières

Pour voir les lignes qui contiennent un motif mais qui n’en contiennent pas non plus, nous pouvons diriger grep dans grep . Nous allons rechercher toutes les lignes contenant le mot « Jabberwock », puis filtrer toutes les lignes qui aussi contenir le mot « tué ».

grep "Jabberwock" jabberwocky.txt | grep -v "slain"

Tuyauterie grep dans grep pour filtrer deux fois

Exclusion de fichiers

Nous pouvons demander grep pour 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" verse-1.txt verse-2.txt verse-3.txt verse-4.txt verse-5.txt verse-6.txt

Recherche dans une liste de fichiers nommés

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

Utilisation de caractères génériques pour rechercher une collection de fichiers

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, nous obtenons beaucoup de faux positifs.

grep "sword" *.txt

Recherche de "épée" dans une collection de fichiers 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.

Un grand ensemble de résultats de faux positifs

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 utiliserons le --exclude option. Pour exclure un seul fichier appelé « vol-log-1.txt », nous utiliserions 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

Exclusion de fichiers avec des caractères génériques

Lorsque nous utilisons le -R (déréférencement-récursif) option grep recherchera des arborescences entières de répertoires pour nous. Par défaut, il recherchera dans tous les fichiers de ces emplacements. Il peut très bien y avoir plusieurs types de fichiers que nous souhaitons exclure.

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 un --exclude option 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 fichiers TXT dont les noms commencent par « vol » ou « log ».

grep -R --exclude=*.{csv,md} --exclude={vol*,log*}.txt "sword" /home/dave/data/

Utilisation de plusieurs clauses --exclude et regroupements de noms de fichiers

Exclure les 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.

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

grep -R --exclude-dir=backup "vorpal" /home/dave/data

Exclure un répertoire de la recherche

Nous avons exclu le répertoire « backup », 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 vers les 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

Exclure deux répertoires de la recherche

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

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

Exclure les répertoires avec regroupement

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 qui sommes recherché, utilisez cette syntaxe :

grep -R --exclude=*.{csv,md} --exclude-dir=backup/archive "frumious" /home/dave/data

Exclusion de types de fichiers et de répertoires dans la même commande

Parfois, c’est ce que vous laissez de côté

Parfois avec grep on peut avoir l’impression d’essayer de trouver une aiguille dans une botte de foin. cela fait une grande différence d’enlever la botte de foin.

★★★★★