Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).


L'icône rouge permet de télécharger chaque page du wiki visitée au format PDF et la grise au format ODT → ODT PDF Export

grep

(testé - smolski 18/10/2012) Le retour sur le forum est ici :

  • Lien vers le forum concernant ce tuto N'hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !
  • Objet : filtre grep
  • Niveau requis : DÉBUTANT
  • Commentaires : Recherche de caractères dans des fichiers textes.
  • Débutant, à savoir :

Utiliser GNU/Linux en ligne de commande, tout commence là !. :-)

Voyez aussi là :

C'est des supers pour expliquer, avec des TP et tout… Merci à toute leur équipe !

Le programme grep explore un ou une série de fichiers d'un ou plusieurs répertoires à la recherche de texte filtrés par une expression régulière donnée (des lettres, des chiffres… ).

Introduction

L'acronyme1) grep vient de la contraction de Get Regular Expression Print, Print signifiant l'affichage.

TP01

Créer les répertoires et fichiers exemples

Créez un répertoire test1 avec un fichier nommé essai.txt comportant des noms et prénoms avec la commande cat :

mkdir test1

Créez le fichier2) essai.txt ainsi :

touch essai.txt

Et rédigez3) ce fichier test1/essai.txt ainsi :

cat > test1/essai.txt <<EOF
 
tartempion eric
greg lucien
howard charles
santiago germaine
EOF

Utilisez la commande cat pour en vérifier le contenu :

cat test1/essai.txt
 
tartempion eric
greg lucien
howard charles
santiago germaine

De la même façon que précédemment, créons un second répertoire nommé test2 dans lequel nous créons le fichier adresse.c contenant les chaînes de caractères suivantes :

cat > test2/adresse.c <<EOF
25, rue de la source
5bis, avenue linux
3358, street gandhi
EOF

On vérifie les deux fichiers d'un coup ainsi :

cat ~/test1/essai.txt ~/test2/adresse.c
tartempion eric
greg lucien
howard charles
santiago germaine
25, rue de la source
5bis, avenue linux
3358, street gandhi

Exemples Pratiques

Si l'on omet le nom de fichier à traiter, grep agit sur le fichier d'entrée (stdin).
Voir commande : pwd

La commande suivante présente toutes les lignes du fichier essai.txt qui contiennent le caractère “c” :

$ grep c ~/test1/essai.txt
tartempion eric
greg lucien
howard charles

Et celle-là pour la lettre “u” :

$ grep u ~/test1/essai.txt
greg lucien

La commande grep peut être étendue à tous les fichiers d'un répertoire, ou encore à tous les fichiers correspondant à un certain masque.

Dans l'exemple qui suit : $ grep a te*/*, la commande grep explorera dans le répertoire :

  1. /home de l'user
  2. à l'interieur des répertoires commençant par “te
  3. tous les types de fichiers dont les chaînes de caractère contiennent la lettre “a
$ grep a ~/te*/*
test1/essai.txt:tartempion eric
test1/essai.txt:howard charles
test2/adresse.c:25, rue de la source
test2/adresse.c:5bis, avenue linux
test2/adresse.c:3358, street gandhi

Les OPTIONS

option -n

L'option -n ajoute le numéro de ligne, ainsi :

$ grep -n a ~/te*/*
test1/essai.txt:2:tartempion eric
test1/essai.txt:4:howard charles
test2/adresse.c:1:25, rue de la source
test2/adresse.c:2:5bis, avenue linux
test2/adresse.c:3:3358, street gandhi

option -i

L'option -i permet d'ignorer la casse (ne fait pas la distinction entre les lettres majuscules et minuscules).

option -v

L'option -v fait la négation, c'est-à-dire qu'elle affiche toutes les lignes, SAUF celles qui contiennent la chaîne de caractères donnée.

option -c

L'option -c ne donne que le nombre de lignes où la chaîne apparaît sans afficher ces lignes.

Expressions rationnelles

Les expressions rationnelles, ou regexp, peuvent remplacer la chaîne de caractères dans l'argument du programme grep.

Voici des exemples :

Expression Valeur
abc Cherche la chaîne abc n'importe où dans la ligne.
^abc Cherche la chaîne abc en début de ligne.
abc$ Cherche la chaîne abc en fin de ligne.
^abc$ Cherche les ligne ne contenant que abc (commençant et se terminant par abc).
st[a-z][a-z]ic Cherche n'importe quelle chaîne de caractères commençant par st, suivie de deux lettres minuscules et se terminant par ic (i.e static).
^int * main Cherche n'importe quelle chaîne de caractères en début de ligne commençant par int, suivie de n'importe quoi et se terminant par argc (i.e int main (int argc, char **argv)).
X[0-2][0-9] Cherche n'importe quelle chaîne de caractères commençant par X, suivie de 0, 1, ou 2 et se terminant par un chiffre (i.e X11).

Nota :

Programme grep avec expressions rationnelles :

Il faut toutefois prendre un soin particulier lorsque l'on utilise les caractères spéciaux :
$, *, [, ], ^, |, (, )
dans l'expression régulière car ces caractères ont une signification particulière pour le shell.
Il vaut mieux mettre l'expression régulière entre apostrophes simples ou doubles '…' ou ”…” comme ceci par exemple :

$ grep -n "^t" te*/*
test1/essai.txt:2:tartempion eric

Notez que les champs des lignes produites par grep (le nom du fichier, le numéro de ligne et la ligne elle-même) sont délimitées par des deux points “:”, ce qui leur permet d'être traités à postériori par le programme awk dans des TUBES.

Pour plus d'information sur la commande grep, lancez :

  $ man grep.
1) acronyme : Sigle pouvant être prononcé comme un mot. Eh oui !
doc/systeme/grep.txt · Dernière modification: 21/04/2014 20:59 (modification externe)

Pied de page des forums

Propulsé par FluxBB