Forum Linux.débutant Recherche d'une expression dans un fichier

Posté par  .
Étiquettes : aucune
0
15
août
2006
Bonjour , je suis a la recherche d'une commande me permettant de faire une recherche d'une chaine de caractere dans un fichier , et plus generalement les fichiers des sous repertoires sont inclus a cette recherche .

Pour mes besoins je souhaite utilise la combinaison de find et grep .

J'en arrive au resultat suivant (peniblement quand meme :-)

find . -name "*.*" | grep -ni expression *

Dans ce cas mon expression est correctement retrouve , mais uniquement pour le repertoire en cours .
L'ensemble des sous repertoire ne sont pas pris en compte

Je suis un peu perdu dans la melasse (de mon cerveau).
Si QQ'un a une idee ou bien un lien pour ces combinaison de commandes

Merki !!!
  • # recursive -r

    Posté par  (site web personnel) . Évalué à 1.

    ça m'etonnerait que tes 2 commandes te donnent le bon resultat mais plutot tous les fichiers dont le nom contient ton expression puisque:
    find va chercher tous les fichiers avec comme nom ton expression
    et grep derriere va prendre le texte resultant du find et réappliquer le filtre

    si tu veux chercher une expression dans des fichiers d'un répertoire
    grep -ni "expression" *

    si tu veux faire la meme chose en incluant les sous répertoires ajoute -r
    grep -nri "expression" *
  • # find | xargs grep

    Posté par  . Évalué à 1.

    essaye plutôt:


    find . -type f | xargs grep -ni 'expression'
  • # Explication

    Posté par  (site web personnel) . Évalué à 2.

    Quand tu fais find . -name "*.*" | grep -ni expression * le resultat du find est perdu.
    grep -ni expression * cherche dans tous les fichiers du repertoire courant sans se soucier de ce que tu lui passes (à cause de l'étoile).
    Une autre remarque, "*.*" c'est en général pas une bonne idée sous Linux vu que beaucoup de fichiers ne contiennent pas de . donc ne sont pas pris en compte.

    Pour faire comme tu l'as fais il faudrait plus find . -type f | xargs grep -ni expression ou find . -type f -exec grep -ni expression {} \; mais le plus simple reste grep -nir expression .
  • # [Regle]

    Posté par  . Évalué à 1.

    Merci pour vos reponses .
    j'ai teste ces commandes ce matin .

    La commande grep -nri "expression" * correspond bien a ce que je cherchais a faire .
    Par contre je pensais devoir d'abord lister mes fichiers find . -type f et apres appliquer le filtre dessus.

    Je vous remercie pour vos reponses (rapide et matinal pour un jour ferie ).
    Merci aussi pour la mise en garde sur la recherche des fichiers a extensions.

    La transition Windows Unix laisse des traces ......

    See You Soon
    Samuel

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.