#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 ?
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
Merci beaucoup, je retiens la solution de credenhill qui fonctionne à la perfection.
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
Hors ligne