IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

grep -r : commande grep avec l'option -r (recursive)


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Liamm
    Femme Profil pro
    Enseignant
    Inscrit en
    Janvier 2019
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 160
    Par défaut grep -r : commande grep avec l'option -r (recursive)
    Bonjour,

    Voici un grep récursif qui marche bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ grep -r pris
    Test_cmd_shell_21/xgrepf_brouillard.txt:Le brouillard a tout pris
    Import_L_vers_M_le_14FEV2021/peb1.sh:# SORTIE : Fichier modifie pour prise de décision
    Comment améliorer cette même commande, en ne faisant la recherche que parmi les scripts shell "*.sh" ?

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 651
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 651
    Par défaut
    Bonjour,

    en bash :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ shopt -s globstar
    $ grep pris **/*.sh
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre confirmé Avatar de Liamm
    Femme Profil pro
    Enseignant
    Inscrit en
    Janvier 2019
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 160
    Par défaut
    Merci N_BaH,

    effectivement ça marche bien avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ grep pris **/*.sh
    #ou
    $ grep pris */*.sh
    mais; pourquoi ça marche ?
    \ : inhibition de caractère ??

    ou, que lire pour comprendre ?

  4. #4
    Membre émérite Avatar de balkany
    Homme Profil pro
    Touriste
    Inscrit en
    Juillet 2017
    Messages
    348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Touriste

    Informations forums :
    Inscription : Juillet 2017
    Messages : 348
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    grep -r --include='*.sh' pris

  5. #5
    Membre confirmé Avatar de Liamm
    Femme Profil pro
    Enseignant
    Inscrit en
    Janvier 2019
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 160
    Par défaut
    Merci balkani,

    Il faudra aussi que je regarde cette option du grep pour bien comprendre !

    J'ai testé les différents codes proposés (sur un autre PC Linux)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    liam@Odi:~/projets$ grep -r pris **/*.sh     # => renvoie 8 lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    liam@Odi:~/projets$ shopt -s globstar
    liam@Odi:~/projets$ grep -r pris **/*.sh                 # => renvoie ces 8 mêmes lignes plus 2 autres !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    liam@Odi:~/projets$ grep -r --include='*.sh' pris    # => renvoie les 10 mêmes lignes que la commande précédente (avec globstar)
    Du coup, sans rentrer dans les détails, l'option avec --include me paraît plus fiable (pour ceux qui ne veulent pas jouer avec globstar)

  6. #6
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 287
    Par défaut
    Bonjour

    Houlala. Attends. On se pose. On boit frais. Et on réfléchit à ce qu'on a.

    Dans la première ligne, tu utilises la double étoile sans activer l'option. Donc c'est comme si tu écrivais */*.sh. Tu désignes donc les scripts dans le premier niveau de dossier; ni ceux à la racine, ni ceux plus profond.

    Dans la deuxième tentative, tu as 10 lignes. Je suis prêt à parier que les 2 fichiers en plus sont, soit à la racine, soit dans un dossier dans un dossier. Car tu as activé globstar.

    Dans la troisième tentative, tu confies à grep la récurrence. Il chasse à la racine et dans tous les niveaux de dossiers. (D'ailleurs il doit manquer une étoile ou un point en fin de commande).

  7. #7
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 102
    Par défaut
    Citation Envoyé par Liamm Voir le message
    effectivement ça marche bien avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ grep pris **/*.sh
    #ou
    $ grep pris */*.sh
    mais; pourquoi ça marche ?
    Àmha de simple posixien amateur, si globstar n'est pas positionné, **/ et */ représentent la même chose:
    tous les répertoires de 1er niveau (hormis, bien évidemment, les invisibles, ceux qui commencent par un ., et notamment ./ et ../ !)

    Citation Envoyé par Liamm

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    liam@Odi:~/projets$ shopt -s globstar
    liam@Odi:~/projets$ grep -r pris **/*.sh                 # => renvoie ces 8 mêmes lignes plus 2 autres !
    Je ne serais pas surpris que les 8 lignes correspondent à des répertoires de 1er niveau et les 2 lignes supplémentaires à des sous-répertoires. ou à des fichiers dans le répertoire courant.

    Bien sûr, j'ai un peu de mal à tester le globstar sur un bash antédiluvien (je n'ai pas encore migré en zsh sous macos).

    Et je ne peux donc pas expérimenter si **/*.sh renvoie également les fichiers à la base, comme *.sh
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ shopt -s globstar
    -bash: shopt: globstar: invalid shell option name
    $ echo $BASH_VERSION
    3.2.57(1)-release

  8. #8
    Membre confirmé Avatar de Liamm
    Femme Profil pro
    Enseignant
    Inscrit en
    Janvier 2019
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 160
    Par défaut
    Merci à tous,
    Je suis content que ma question ait soulevé pas mal d'interrogations ! :-)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Commande join avec l'option -o
    Par Liamm dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 05/03/2021, 19h24
  2. Réponses: 4
    Dernier message: 09/10/2020, 09h38
  3. Filtrer le résultat de la commande "env" avec "grep"
    Par Silvarsh dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 20/06/2019, 15h46
  4. Bash: Association de commande(s) avec grep impossible.
    Par push221 dans le forum Shell et commandes GNU
    Réponses: 21
    Dernier message: 27/12/2018, 21h24
  5. Grep avec plusieurs possibilite
    Par Darfox dans le forum Web
    Réponses: 5
    Dernier message: 31/07/2008, 11h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo