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 :

Utilisation de grep


Sujet :

Shell et commandes GNU

  1. #1
    Membre expérimenté Avatar de julien.63
    Profil pro
    balayeur
    Inscrit en
    Décembre 2005
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : balayeur

    Informations forums :
    Inscription : Décembre 2005
    Messages : 1 348
    Points : 1 311
    Points
    1 311
    Par défaut Utilisation de grep
    Salut,
    je dois chercher tous les fichiers dont le nom contient audubon ou dans lequel se trouve le mot "audubon".
    Pour la première recherche j'ai fait ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    root@STRI-DB01:~# find / | grep audubon
    ce qui m'a sorti une petite quinzaine de fichier. Donc je pense que c'est bon.

    Par contre je n'arrive pas à écrire la commande GREP pour scanner l'intérieur des fichiers.
    J'ai essayé plusieurs trucs mais ça ne me donne aucun résultat. Je trouve ça plutot louche et je pense que je dois m'y prendre.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    root@STRI-DB01:/# grep -l audubon *
    -- pas de résultat --
    root@STRI-DB01:/# grep -l audubon /*
    -- pas de résultat --
    Merci d'avance pour vos conseils.

  2. #2
    Expert éminent
    Avatar de Michaël
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2003
    Messages
    3 497
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Juillet 2003
    Messages : 3 497
    Points : 8 239
    Points
    8 239
    Par défaut
    ça va être carrément plus long comme recherche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #!/bin/sh
     
    for i in $(find / -type f); do
        echo -n "Scanne $i : "
        OUTPUT=$(cat $i|grep audubon)
        if [ ${#OUTPUT} = 0 ]; then
        echo "rien"
        else
        echo "oui"
        fi
    done
    le ${#VAR} permet de tester la longueur de VAR. si c'est 0, alors c'est que grep n'a rien trouvé

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 792
    Points : 1 206
    Points
    1 206
    Par défaut
    Et pourquoi pas simplement:
    -r pour scanner récursivement le contenu de tous les fichiers du répertoire courant. Tu peux éventuellement y rajouter l'option -i pour rendre la recherche insensible à la casse.

  4. #4
    Membre chevronné

    Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 296
    Points : 1 803
    Points
    1 803
    Par défaut
    avec le find et le grep :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    find . -type f -name "*audubon*" -exec grep -H -w audubon {} ;\
    te sort tout les fichiers comportant le mot audubon (mot au sens unix) et dont le nom comporte la chaine audubon.

  5. #5
    Membre expérimenté

    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mars 2004
    Messages
    1 060
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 060
    Points : 1 609
    Points
    1 609
    Par défaut
    tu veux chercher une chaine à l'interieur d'un seul fichier ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cat fichier | grep chaine

  6. #6
    Membre chevronné

    Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 296
    Points : 1 803
    Points
    1 803
    Par défaut
    Citation Envoyé par chaval
    tu veux chercher une chaine à l'interieur d'un seul fichier ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cat fichier | grep chaine
    pourquoi faire un | et un cat ? pour faire gigotter le CPU ?
    tel et la syntaxe donnée dans le man !

  7. #7
    Expert confirmé
    Avatar de becket
    Profil pro
    Informaticien multitâches
    Inscrit en
    Février 2005
    Messages
    2 854
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informaticien multitâches
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 2 854
    Points : 5 915
    Points
    5 915
    Par défaut
    find ./ -name "*.audubon*" -or -exec grep -l audubon {} \;

    Soit le nom contient audubon, soit le contenu du fichier contient audubon

  8. #8
    Membre expérimenté

    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mars 2004
    Messages
    1 060
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 060
    Points : 1 609
    Points
    1 609
    Par défaut
    Citation Envoyé par MarcG
    pourquoi faire un | et un cat ? pour faire gigotter le CPU ?
    Tu sais, je suis adepte des methodes dites "a l'américaine"

  9. #9
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 792
    Points : 1 206
    Points
    1 206
    Par défaut
    Citation Envoyé par chaval
    Tu sais, je suis adepte des methodes dites "a l'américaine"
    [troll]Pas si mauvaise que ça finalement! [/troll]

    Pour en avoir le coeur net, j'ai fait un petit bench sur les deux syntaxes. Un bête grep sur un gros fichier log (22 Mo).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #! /bin/sh
    #
    #
    export TIME="TIME\n\t%E real\n\t%U user\n\t%S sys\nCPU\n\t%P cpu\nMEM\n\t%K Kb\n---------------------"
     
    /usr/bin/time -o tmp_time  grep '192.168.0.151' /var/log/apache2/access.log.1
    /usr/bin/time -o tmp_time -a  cat /var/log/apache2/access.log.1 | grep '192.168.0.151'
     
    cat tmp_time
    rm -f tmp_time
    Résultat:
    TIME
    0:01.46 real
    0.30 user
    0.10 sys
    CPU
    27% cpu
    MEM
    0 Kb
    ---------------------
    TIME
    0:01.44 real
    0.00 user
    0.01 sys
    CPU
    0% cpu
    MEM
    0 Kb
    ---------------------
    Le CPU semble moins "gigoter" avec la méthode américaine.

    Curieux non? Le CPU load est calculé en prenant le :
    Percentage of the CPU that this job got. This is just user + system times divided by the total running time
    Le cat + pipe, moins élégant c'est vrai, ne semble rien envoyer dans le user space d'où son bon résultat.

  10. #10
    Membre expérimenté

    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mars 2004
    Messages
    1 060
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 060
    Points : 1 609
    Points
    1 609
    Par défaut
    Citation Envoyé par ripat
    [troll]Pas si mauvaise que ça finalement! [/troll]
    Le CPU semble moins "gigoter" avec la méthode américaine.
    Tu sais, l'élégance, je m'en fiche lol... Le CPU qui gigote aussi, je fais rarement des recherches sur des fichhiers de plus d'1Mo, au pire, j'utilise VI

    Je suis un partisan du moindre effort, pourquoi parcourir un man de 40 pages ou retenir une commande à rallonga alors qu'un "cat | grep" s'écrit en un rien de temps

    Le prochaine fois, je penserai à toi

  11. #11
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 101
    Points : 28 395
    Points
    28 395
    Par défaut
    Les différences de temps de traitement peuvent aussi s'expliquer parce que lors de l'exécution de la seconde commande, le ficheir traité a déjà été lu et est resté en cache.
    Essaye d'inverser les commandes avant de relancer ton test de comparaison de temps de traitement...

  12. #12
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 792
    Points : 1 206
    Points
    1 206
    Par défaut
    Citation Envoyé par al1_24
    Les différences de temps de traitement peuvent aussi s'expliquer parce que lors de l'exécution de la seconde commande, le ficheir traité a déjà été lu et est resté en cache.
    Essaye d'inverser les commandes avant de relancer ton test de comparaison de temps de traitement...
    J'y avais pensé aussi et l'inversion des commandes ne change pas le résultat.

    Je n'y attacherais pas trop d'importance car la manière dont est calculée la charge du CPU ne me semble pas très réaliste. Ce qui compte, finalement c'est le temps CPU total. Et, sur ce plan, les deux manières se valent.

  13. #13
    Membre expérimenté Avatar de julien.63
    Profil pro
    balayeur
    Inscrit en
    Décembre 2005
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : balayeur

    Informations forums :
    Inscription : Décembre 2005
    Messages : 1 348
    Points : 1 311
    Points
    1 311
    Par défaut
    salut,
    j'avoue que je n'en suis pas à comparer laquelle des solutions est la plus rapide.
    Mais quoiqu'il en soit merci à tous, j'ai trouvé mes fichiers grâce à vous.
    @+

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

Discussions similaires

  1. utilisation de grep
    Par Msakeni dans le forum Applications et environnements graphiques
    Réponses: 0
    Dernier message: 20/10/2009, 21h33
  2. Utilisation de grep -v
    Par chtorrel dans le forum AIX
    Réponses: 4
    Dernier message: 09/07/2008, 14h08
  3. [debutant] utilisation de grep
    Par john stedd dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 17/11/2007, 11h14
  4. utiliser commande grep
    Par salim81 dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 01/07/2007, 21h52
  5. Problème avec l'utilisation de grep
    Par fgalves dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 07/11/2006, 23h49

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