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
doc:systeme:grep [21/09/2013 19:06]
127.0.0.1 modification externe
doc:systeme:grep [30/11/2020 17:35] (Version actuelle)
JoBisou [Exemples Pratiques] Un "s" de trop qui se baladait sur le descriptif de l'oprion -i (casSe / case)
Ligne 1: Ligne 1:
 ====== grep  ====== ====== grep  ======
  
-(//testé// - **smolski** 18/10/2012) Le retour sur le forum est ici : 
-  * [[http://​debian-facile.org/​viewtopic.php?​id=1039 | 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   * Objet : filtre grep
-  * Niveau requis : DÉBUTANT +  * Niveau requis : {{tag>​débutant avisé}} 
-  * Commentaires : // Recherche de caractères dans des fichiers textes. // +  * Commentaires : //Recherche de caractères dans des fichiers textes.// 
-  * Débutant, à savoir : +  * Débutant, à savoir : [[:​doc:​systeme:​commandes:​le_debianiste_qui_papillonne|Utiliser GNU/Linux en ligne de commande, tout commence là !]] :-
-[[manuel:​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 !))
  
-Voyez aussi là : 
-  * [[http://​www.ac-creteil.fr/​reseaux/​systemes/​linux/​shell-scripts/​filtres.html | ac-creteil Filtres]] 
- 
-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 ===== ===== 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. 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 ===== ===== TP01 =====
Ligne 25: Ligne 23:
  
 Créez un répertoire test1 avec un fichier nommé essai.txt comportant des noms et prénoms avec la commande [[cat]] : Créez un répertoire test1 avec un fichier nommé essai.txt comportant des noms et prénoms avec la commande [[cat]] :
-<​code ​bash> +<​code ​user>mkdir test1</​code>​
-mkdir test1</​code>​+
  
 Créez le fichier(([[:​doc:​systeme:​touch]])) essai.txt ainsi : Créez le fichier(([[:​doc:​systeme:​touch]])) essai.txt ainsi :
-<​code ​bash> +<​code ​user>touch essai.txt</​code>​
-touch essai.txt</​code>​+
  
 Et rédigez(([[:​doc:​systeme:​cat]])) ce fichier **test1/​essai.txt** ainsi : Et rédigez(([[:​doc:​systeme:​cat]])) ce fichier **test1/​essai.txt** ainsi :
-<​code ​bash>+<​code ​user>
 cat > test1/​essai.txt <<EOF cat > test1/​essai.txt <<EOF
- 
 tartempion eric tartempion eric
 greg lucien greg lucien
Ligne 43: Ligne 38:
  
 Utilisez la commande [[:​doc:​systeme:​cat]] pour en vérifier le contenu : Utilisez la commande [[:​doc:​systeme:​cat]] pour en vérifier le contenu :
-<​code ​bash>cat test1/​essai.txt +<​code ​user>cat test1/​essai.txt</​code>​ 
 +<file config retour de la commande>​
 tartempion eric tartempion eric
 greg lucien greg lucien
 howard charles howard charles
-santiago germaine</​code>+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 : 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 ​bash>+<​code ​user>
 cat > test2/​adresse.c <<EOF cat > test2/​adresse.c <<EOF
 25, rue de la source 25, rue de la source
Ligne 59: Ligne 54:
  
 On vérifie les deux fichiers d'un coup ainsi : On vérifie les deux fichiers d'un coup ainsi :
-<​code ​bash> +<​code ​user>cat ~/​test1/​essai.txt ~/​test2/​adresse.c</​code>​ 
-cat ~/​test1/​essai.txt ~/​test2/​adresse.c</​code>​ +<file config retour de la commande>​tartempion eric
-<code>​tartempion eric+
 greg lucien greg lucien
 howard charles howard charles
Ligne 67: Ligne 61:
 25, rue de la source 25, rue de la source
 5bis, avenue linux 5bis, avenue linux
-3358, street gandhi</code>+3358, street gandhi</file>
  
 ===== Exemples Pratiques ===== ===== Exemples Pratiques =====
Ligne 76: Ligne 70:
  
 La commande suivante présente toutes les lignes du fichier essai.txt qui contiennent le caractère "​**c**"​ : La commande suivante présente toutes les lignes du fichier essai.txt qui contiennent le caractère "​**c**"​ :
-<​code ​bash>grep c ~/​test1/​essai.txt</​code>​ +<​code ​user>grep c ~/​test1/​essai.txt</​code>​ 
-<code>​tartempion eric+<file config retour de la commande>​tartempion eric
 greg lucien greg lucien
-howard charles</​code>+howard charles</​file>
  
 Et celle-là pour la lettre "​**u**"​ : Et celle-là pour la lettre "​**u**"​ :
-<​code ​bash>grep u ~/​test1/​essai.txt</​code>​ +<​code ​user>grep u ~/​test1/​essai.txt</​code>​ 
-<code>greg lucien</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//. 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 :+Dans l'​exemple qui suit : ''​grep a te*/​*'',​ la commande ''​grep''​ explorera dans le répertoire :
   - /home de l'//​user//​   - /home de l'//​user//​
-  - à l'interieur ​des répertoires commençant par "​**te**"​+  - à 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**"​   - tous les types de fichiers dont les chaînes de caractère contiennent la lettre "​**a**"​
  
-<​code ​bash>grep a ~/​te*/​*</​code>​ +<​code ​user>grep a ~/​te*/​*</​code>​ 
-<code>+<file config retour de la commande>
 test1/​essai.txt:​tartempion eric test1/​essai.txt:​tartempion eric
 test1/​essai.txt:​howard charles test1/​essai.txt:​howard charles
Ligne 100: Ligne 94:
 test2/​adresse.c:​5bis,​ avenue linux test2/​adresse.c:​5bis,​ avenue linux
 test2/​adresse.c:​3358,​ street gandhi test2/​adresse.c:​3358,​ street gandhi
-</code>+</file>
  
 ==== Les OPTIONS ==== ==== Les OPTIONS ====
Ligne 107: Ligne 101:
  
 L'​option ''​-n''​ ajoute le numéro de ligne, ainsi : L'​option ''​-n''​ ajoute le numéro de ligne, ainsi :
-<​code ​bash> +<​code ​user>grep -n a ~/​te*/​*</​code>​ 
-grep -n a ~/​te*/​*</​code>​ +<file config retour de la commande>
-<code>+
 test1/​essai.txt:​2:​tartempion eric test1/​essai.txt:​2:​tartempion eric
 test1/​essai.txt:​4:​howard charles test1/​essai.txt:​4:​howard charles
 test2/​adresse.c:​1:​25,​ rue de la source test2/​adresse.c:​1:​25,​ rue de la source
 test2/​adresse.c:​2:​5bis,​ avenue linux test2/​adresse.c:​2:​5bis,​ avenue linux
-test2/​adresse.c:​3:​3358,​ street gandhi</code>+test2/​adresse.c:​3:​3358,​ street gandhi</file>
  
 === option -i === === option -i ===
  
-L'​option ''​-i''​ permet d'​ignorer la casse (ne fait pas la distinction entre les lettres majuscules et minuscules).+L'​option ''​-i''​ permet d'​ignorer la case (ne fait pas la distinction entre les lettres majuscules et minuscules).
  
 === option -v === === option -v ===
Ligne 128: Ligne 121:
 L'​option ''​-c''​ ne donne que le nombre de lignes où la chaîne apparaît __sans afficher ces lignes__. L'​option ''​-c''​ ne donne que le nombre de lignes où la chaîne apparaît __sans afficher ces lignes__.
  
-==== Expressions régulières ====+===option -m === 
 +L'​option ''​-m N occurrence''​ : permet d'​arrêter ​ de  lire  un  fichier ​ après ​ avoir  trouvé ​ N ligne(s) avec occurrence.
  
-Les expressions ​régulières, ou [[regexp]], peuvent remplacer la chaîne de caractères dans l'​argument du programme grep.+==== 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 : Voici des exemples :
Ligne 144: Ligne 140:
 **Nota :** **Nota :**
  
-Programme grep avec expressions ​régulières ​:+Programme grep avec expressions ​rationnelles ​:
  
 Il faut toutefois prendre un soin particulier lorsque l'on utilise les caractères spéciaux : \\ Il faut toutefois prendre un soin particulier lorsque l'on utilise les caractères spéciaux : \\
Ligne 150: Ligne 146:
 dans l'​expression régulière car ces caractères ont une signification particulière pour le shell. \\ 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 : Il vaut mieux mettre l'​expression régulière entre apostrophes simples ou doubles ''​ '​...'​ ou  "​..."​ ''​ comme ceci par exemple :
-<​code ​bash> +<​code ​user>grep -n "​^t"​ te*/​*</​code>​ 
-grep -n "​^t"​ te*/​*</​code>​ +<file config retour de la commande>​test1/​essai.txt:​2:​tartempion eric</file>
-<code>​test1/​essai.txt:​2:​tartempion eric</code>+
  
-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 [[manuel:pipe | TUBES]].+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 : Pour plus d'​information sur la commande grep, lancez :
-    $ man grep.+<code user>man grep</​code>​ 
 + 
 + 
 +==== Script pratique ==== 
 + 
 +==== La cinémathèque à Jojo ==== 
 + 
 +Je suis avec une ligne de texte indiquant les fichiers ​ des films d'une cinémathèque se présentant avec des dossier-titres&​fichiers-films alternés\\ 
 +Je désire créer la liste de l'​ensemble. 
 + 
 +Je commence par utiliser [[doc:​systeme:​tree|la commande tree]]. 
 + 
 +Je me retrouve donc avec une liste_films.txt où les titres des dossiers et ceux des films sont indiqués l'un dessous de l'​autre,​ il me faut donc supprimer toutes les lignes des fichiers des films et ne conserver que celles des répertoires,​ sans extension mp4,  
 + 
 +Facile, ils ont tous leur extension propre, mp4.mkv ou VOB. 
 + 
 +Trêve de détail, voici la commande qui a conservé la ligne des titres des répertoires et supprimé toutes celles des films : 
 + 
 +On se place où se situe le fichier des films titré avec tree, par exemple un fichier qu'on aura nommé liste.txt, et on envoi le bouzin : 
 +<code user>​grep -viE "​\.(mkv|mp4|vob)"​ liste.txt</​code>​ 
 +Et il ne nous reste plus qu'à créer le nouveau fichier.txt correctement trié à l'aide des commandes [[doc:​systeme:​cat|cat]] et [[doc:​programmation:​shell:​chevrons|chevron]] assemblées. 
 + 
 +Merci au captnfab qui a tout soufflé le procédé ! ;-) 
 + 
 +===== Lien vers le forum ===== 
 + 
 +  * [[https://​debian-facile.org/​viewtopic.php?​pid=161583#​p161583 | (Résolu) Cherche commande bash Oui - Non]]
doc/systeme/grep.1379783162.txt.gz · Dernière modification: 22/09/2013 10:57 (modification externe)

Pied de page des forums

Propulsé par FluxBB