logo Debian Debian Debian-France Debian-Facile Debian-fr.org Forum-Debian.fr Debian ? Communautés logo inclusivité

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

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
Prochaine révision Les deux révisions suivantes
doc:systeme:grep [13/07/2010 10:30]
smolski
doc:systeme:grep [20/09/2015 18:50]
milou [grep]
Ligne 1: Ligne 1:
 +====== grep  ======
 +
 +  * Objet : filtre grep
 +  * Niveau requis : {{tag>​débutant avisé}}
 +  * Commentaires : //Recherche de caractères dans des fichiers textes.//
 +  * Débutant, à savoir : [[:​doc:​systeme:​commandes:​le_debianiste_qui_papillonne|Utiliser GNU/Linux en ligne de commande, tout commence là !]] :-)
 +  * Suivi :
 +    * Création par [[user>​smolski]] le 17/01/2009
 +    * Testé par [[user>​smolski]] le 18/10/2012
 +  * Commentaires sur le forum : [[https://​debian-facile.org/​viewtopic.php?​id=1039 | c'est ici]] ((N'​hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !))
 +
 +
 +===== Introduction =====
 +
 +L'​acronyme((acronyme : Sigle pouvant être prononcé comme un mot. Eh oui !)) grep vient de la contraction de **Get Regular Expression Print**, //Print// signifiant l'​affichage.
 +
 +
 +Le programme grep explore un ou une série de fichiers d'un ou plusieurs répertoires à la recherche de textes filtrés par une expression régulière donnée (//des lettres, des chiffres//​... ).
 +
 +===== 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]] :
 +<code user>​mkdir test1</​code>​
 +
 +Créez le fichier(([[:​doc:​systeme:​touch]])) essai.txt ainsi :
 +<code user>​touch essai.txt</​code>​
 +
 +Et rédigez(([[:​doc:​systeme:​cat]])) ce fichier **test1/​essai.txt** ainsi :
 +<code user>
 +cat > test1/​essai.txt <<EOF
 +tartempion eric
 +greg lucien
 +howard charles
 +santiago germaine
 +EOF</​code>​
 +
 +Utilisez la commande [[:​doc:​systeme:​cat]] pour en vérifier le contenu :
 +<code user>cat test1/​essai.txt</​code>​
 +<file config retour de la commande>​
 +tartempion eric
 +greg lucien
 +howard charles
 +santiago germaine</​file>​
 +
 +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 :
 +<code user>
 +cat > test2/​adresse.c <<EOF
 +25, rue de la source
 +5bis, avenue linux
 +3358, street gandhi
 +EOF</​code>​
 +
 +On vérifie les deux fichiers d'un coup ainsi :
 +<code user>cat ~/​test1/​essai.txt ~/​test2/​adresse.c</​code>​
 +<file config retour de la commande>​tartempion eric
 +greg lucien
 +howard charles
 +santiago germaine
 +25, rue de la source
 +5bis, avenue linux
 +3358, street gandhi</​file>​
 +
 +===== Exemples Pratiques =====
 +
 +<note important>​Si l'on omet __le nom de fichier__ à traiter, ''​grep''​ agit sur le fichier d'​entrée (**stdin**). \\ 
 +Voir commande : [[:​doc:​systeme:​pwd]]
 +</​note>​
 +
 +La commande suivante présente toutes les lignes du fichier essai.txt qui contiennent le caractère "​**c**"​ :
 +<code user>​grep c ~/​test1/​essai.txt</​code>​
 +<file config retour de la commande>​tartempion eric
 +greg lucien
 +howard charles</​file>​
 +
 +Et celle-là pour la lettre "​**u**"​ :
 +<code user>​grep u ~/​test1/​essai.txt</​code>​
 +<file config retour de la commande>​greg lucien</​file>​
 +
 +
 +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 :
 +  - /home de l'//​user//​
 +  - à l'​intérieur des répertoires commençant par "​**te**"​
 +  - tous les types de fichiers dont les chaînes de caractère contiennent la lettre "​**a**"​
 +
 +<code user>​grep a ~/​te*/​*</​code>​
 +<file config retour de la commande>​
 +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
 +</​file>​
 +
 +==== Les OPTIONS ====
 +
 +=== option -n ===
 +
 +L'​option ''​-n''​ ajoute le numéro de ligne, ainsi :
 +<code user>​grep -n a ~/​te*/​*</​code>​
 +<file config retour de la commande>​
 +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</​file>​
 +
 +=== 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__.
 +
 +===option -m ===
 +L'​option ''​-m N occurrence''​ : permet d'​arrêter ​ de  lire  un  fichier ​ après ​ avoir  trouvé ​ N ligne(s) avec occurrence.
 +
 +==== Expressions rationnelles ====
 +
 +Les expressions rationnelles,​ ou [[:​doc:​programmation:​shell:​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 :
 +<code user>​grep -n "​^t"​ te*/​*</​code>​
 +<file config retour de la commande>​test1/​essai.txt:​2:​tartempion eric</​file>​
 +
 +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 [[:​doc:​programmation:​shell:​pipe | TUBES]].
 +
 +Pour plus d'​information sur la commande grep, lancez :
 +<code user>man grep</​code>​
  
doc/systeme/grep.txt · Dernière modification: 30/11/2020 17:35 par JoBisou

Pied de page des forums

Propulsé par FluxBB