grep
100%

Text-Fu · Leçon 16

grep

Apprenez à sélectionner des lignes avec des chaînes fixes ou des expressions régulières et à interpréter les résultats.

grep sélectionne les lignes d'entrée correspondant à un motif. Il recherche des fichiers ou stdin, affiche du contexte, compte des lignes et signale par son code de sortie si une correspondance existe.

Rechercher des lignes dans un fichier

Fournissez un motif puis un ou plusieurs fichiers :

$ grep 'fox' sample.txt

GNU grep interprète par défaut le motif comme une expression régulière basique. Citez les motifs pour empêcher le shell d'interpréter d'abord leurs espaces ou métacaractères.

-F demande une chaîne fixe :

$ grep -F 'price: $5.00' products.txt

Quelle commande recherche littéralement price: $5.00 dans products.txt, sans syntaxe d'expression régulière ?

Choisir la syntaxe du motif

GNU grep propose trois modes courants : expressions régulières basiques par défaut, étendues avec -E, et chaînes fixes avec -F. Les ancres ^ et $ désignent le début et la fin d'une ligne.

$ grep -E '\.txt$' filenames.txt

La barre oblique inverse rend le point littéral ; un . non échappé correspond à n'importe quel caractère.

Quelle expression régulière étendue correspond aux lignes finissant littéralement par .txt ?

Fournir les motifs en sécurité

-e PATTERN fournit explicitement un motif, notamment lorsqu'il commence par - :

$ grep -e '-v' settings.conf

Les guillemets seuls n'empêchent pas l'analyse des options. Répétez -e pour plusieurs motifs, ou utilisez -f patterns.txt pour en lire un par ligne.

Quelle commande recherche le motif -v dans settings.conf au lieu de l'interpréter comme une option ?

Contrôler la sortie sélectionnée

  • -i : ignorer la casse.
  • -n : préfixer les numéros de ligne.
  • -v : sélectionner les lignes non correspondantes.
  • -c : compter les lignes sélectionnées par fichier.
  • -o : afficher uniquement chaque partie correspondante non vide.
$ grep -ic 'fox' sample.txt

-c compte des lignes, pas toutes les occurrences dans celles-ci. Pour compter des correspondances non superposées avec GNU grep, un pipeline possible est grep -o PATTERN | wc -l.

data.txt contient une ligne avec error error et deux sans correspondance. Que renvoie grep -c 'error' data.txt ?

Filtrer stdin et rechercher dans des répertoires

Sans fichier, grep lit stdin :

$ env | grep '^USER='

Utilisez -r pour parcourir récursivement les fichiers lisibles d'un répertoire :

$ grep -r 'listen_port' config/

-r recherche récursivement dans les fichiers lisibles. Les erreurs d'autorisation vont sur stderr et ne constituent pas une entrée de recherche. Ciblez le chemin et comprenez les droits avant d'élever les privilèges.

Dans generate-report | grep 'failed', quelle entrée grep recherche-t-il ?

Interpréter le code de sortie

Pour une recherche ordinaire, GNU grep renvoie 0 si au moins une ligne est sélectionnée, 1 si aucune ne l'est et 2 en cas d'erreur. Un script peut donc distinguer absence de résultat, fichier illisible et motif invalide.

-q supprime la sortie normale et s'arrête après la première correspondance. Ne déduisez pas le succès d'un écran vide : mode silencieux, redirection, absence de correspondance et erreur peuvent tous produire peu de stdout, mais leurs états diffèrent.

Leçon terminée

Vous avez terminé grep

Vous savez rechercher du texte ligne par ligne et distinguer les correspondances des erreurs.

  • Choisir entre motifs basiques, étendus ou fixes.

  • Citer les motifs et employer -e devant un tiret.

  • Compter les lignes sélectionnées sans les confondre avec les occurrences.

  • Filtrer stdin ou rechercher récursivement dans un chemin ciblé.

  • Interpréter les codes de correspondance, d'absence et d'erreur.

Conservez votre progression

Créez un compte gratuit pour enregistrer cette leçon et continuer sur n'importe quel appareil.

Créer un compte gratuit
Retour à Text-Fu