Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 20/06/2012, à 13:39

Guiver

[Résolu en une heure]grep dans résultat rgrep, possible ?

Bonjour à tous,

J'ai une question qui reste actuellement sans réponse.
La situation :
Je suis en ce moment en train de faire des recherches sur un ensemble de fichiers pour trouver par exemple "toto".
Jusqu'à maintenant, j'utilise très simplement :

sudo grep -r "toto" /var/www/site

Mais la ou sa se complique, c'est qu'il faut que je trouve maintenant dans quels fichiers se trouvent "toto" "tata" et "papa".

J'ai d'abord pensé à un pipe, mais si j'ai bien compris, grep recherche les chaines de caractères situé sur la même ligne. Hors, ce n'est pas le cas, j'ignore même l'ordre d'apparition des mots.

Je pense que c'est possible mais étant débutant j'ignore quel commande pourra m'aider. En faisant des recherches, j'ai pensé que awk pourrait faire l'affaire mais il est très complexe à aborder lorsqu'on débute.

Quelqu'un à une piste de réflexion ?

Merci

Dernière modification par Guiver (Le 20/06/2012, à 15:28)

Hors ligne

#2 Le 20/06/2012, à 13:44

Compte anonymisé

Re : [Résolu en une heure]grep dans résultat rgrep, possible ?

sudo grep -Er "toto|tata|papa" /var/www/site

#3 Le 20/06/2012, à 14:04

Guiver

Re : [Résolu en une heure]grep dans résultat rgrep, possible ?

Avant tout, merci pour la réponse ultra rapide,  j'ai à peine eu le temps d'aller boire le café lol

J'avais déjà essayé cette possibilité, mais je ne veux pas les fichiers qui comporte toto OU tata, mais toto ET tata (^_^)

Hors ligne

#4 Le 20/06/2012, à 14:14

dev/random

Re : [Résolu en une heure]grep dans résultat rgrep, possible ?

Guiver a écrit :

Mais la ou sa se complique, c'est qu'il faut que je trouve maintenant dans quels fichiers se trouvent "toto" "tata" et "papa".

En shell, assez moche et peu performant:

find /var/www/site -type f |
while read f; do
        grep -q toto "$f" &&
        grep -q tata "$f" &&
        grep -q papa "$f" &&
        echo $f
done

Avec awk:

find /var/www/site -type f |
while read f; do
        awk '
        /toto/ { toto=1 }
        /tata/ { tata=1 }
        /papa/ { papa=1 }
        END { if (toto+tata+papa != 3) exit(1) }' "$f" &&
        echo $f
done

Il doit y avoir moyen de mieux faire.
La question est de savoir si tes critères de recherche sont fixés et connus à l'avance ou pas ?..


667, the neighbour of the beast..

Hors ligne

#5 Le 20/06/2012, à 14:37

credenhill

Re : [Résolu en une heure]grep dans résultat rgrep, possible ?

hello
affiche le nom des fichiers qui contiennent toto ET tata ET papa

$ find  /var/www/site  -type f -exec awk '/tata/ {a++} /toto/ {b++} /papa/ {c++} a && b && c {print FILENAME ; exit}' {} \;

Dernière modification par credenhill (Le 20/06/2012, à 14:40)

Hors ligne

#6 Le 20/06/2012, à 15:27

Guiver

Re : [Résolu en une heure]grep dans résultat rgrep, possible ?

3 réponses en moins d'une heure, vous venez de me vendre du rêve big_smile

Merci beaucoup, je retiens la solution de credenhill qui fonctionne à la perfection. lol

Si j'ai bien compris, la commande find -type f permet de lancer la commande -exec sur chaque fichiers puis awk nous permet non seulement la recherche de chaines de caractères mais aussi d'afficher le résultat o_O ?

C'est magique  tongue

Hors ligne