recherche avec GREP

tabliertablier Membre
@muqaddar -> on ne sait jamais ou mettre ce type de post!!

Je souhaite recherche un pattern dans tous les fichier d'un dossier. j'ai essayé plusieurs variations de lignes de commande du genre
grep --recursive -e "le_pattern" --file=chemin_du_dossier
la seule chose que j'obtiens est : grep: warning: recursive search of stdin
Donc il y a quelque chose que je n'ai pas compris dans le man de grep!!
Comment dois-je écrire ma demande?

Réponses

  • chkdskschkdsks Membre
    février 2011 modifié #2
    Il faut utiliser un pipe pour qu'il ne prenne pas l'entrée standard :
    [tt]
    cd $HOME
    ls -Rl | grep -e "Doc"
    [/tt]
    Ou
    [tt]
    grep --recursive -e "Doc" $HOME
    [/tt]

    On peut mettre le chemin que l'on veut à  la place de $HOME

    Si on prend le man grep, grep [options] [-e PATTERN | -f FILE] [FILE...], le FILE sans -f est prioritaire (le dernier), sinon il prend sur l'entrée standard je pense, l'option --file (-f pareil) c'est pour obtenir le pattern à  partir d'un fichier (d'où le ou logique).
  • sekaijinsekaijin Membre
    16:41 modifié #3
    grep -r lepatern chemin/*
    exp:
    grep -r test ./*

    A+JYT
  • tabliertablier Membre
    16:41 modifié #4
    effectivement, j'ai été chercher des trucs!!!!!
    ça marche, mon erreur principale est l'oubli de /* en fin du chemin!

    Merci à  vous.
  • AliGatorAliGator Membre, Modérateur
    16:41 modifié #5
    C'est pas surtout le fait que tu aies utilisé --file= pensant que tu devais dans ce flag mettre le chemin du dossier dans lequel tu voulais chercher le texte, alors que ce flag permet en fait d'indiquer un fichier contenant la liste de tous les patterns à  rechercher ?

    Si tu veux rechercher "toto" dans le dossier "tata" récursivement, c'est "grep -re toto tata" et pas "grep -re toto --file=tata" !
    Car là  avec [tt]grep --recursive -e "le_pattern" --file=chemin[/tt] tu lui demandes de chercher à  la fois le pattern "le_pattern" ET aussi tous les patterns qu'il va trouver en lisant le fichier "chemin", et faire cette recherche récursivement dans... bah tu n'as pas indiquer dans quoi, donc par défaut il suppose que c'est dans stdin ! (Or faire une recherche recursive dans stdin ça n'a pas de sens, d'où le warning !)

    Et à  priori pas besoin du "/*" en fin de chemin si tu mets le flag "-r" (ou "--recursive")
  • tabliertablier Membre
    16:41 modifié #6
    effectivement!
Connectez-vous ou Inscrivez-vous pour répondre.