Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 28/07/2006, 22h15   #1
Membre émérite
 
Avatar de julien.63
 
Inscription : décembre 2005
Messages : 1 322
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 1 322
Points : 981
Points : 981
Envoyer un message via MSN à julien.63
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 :
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 :
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.
julien.63 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/07/2006, 12h45   #2
Rédacteur/Modérateur
 
Avatar de Michaël
 
Michaël Todorovic
Ingénieur systèmes et réseaux
Inscription : juillet 2003
Messages : 3 493
Détails du profil
Informations personnelles :
Nom : Michaël Todorovic
Âge : 25
Localisation : France, Paris (Île de France)

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

Informations forums :
Inscription : juillet 2003
Messages : 3 493
Points : 5 899
Points : 5 899
ça va être carrément plus long comme recherche
Code :
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é
Michaël est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/07/2006, 08h03   #3
Membre émérite
 
Inscription : mai 2004
Messages : 709
Détails du profil
Informations personnelles :
Localisation : Belgique

Informations forums :
Inscription : mai 2004
Messages : 709
Points : 852
Points : 852
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.
__________________
:q :q! :wq :w :w! :wq! :quit :quit! :help help helpquit quit quithelp
:quitplease :quitnow :leave :shit ^X^C ^C ^D ^Z ^Q QUITDAMMIT
Jabber: ripat at im.apinc.org
ripat est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/07/2006, 14h43   #4
Rédacteur
 
Inscription : mars 2004
Messages : 1 298
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 1 298
Points : 1 450
Points : 1 450
avec le find et le grep :
Code :
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.
__________________
Marc
Slackware for ever ......
BASH - KSH ( http://marcg.developpez.com/ksh/ )
MarcG est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/07/2006, 16h35   #5
Membre Expert
 
Homme
Inscription : mars 2004
Messages : 1 051
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : mars 2004
Messages : 1 051
Points : 1 031
Points : 1 031
tu veux chercher une chaine à l'interieur d'un seul fichier ?

Code :
cat fichier | grep chaine
__________________
Chaval
__________________
"Monsieur le chat voudriez-vous, s'il vous plait, demanda Alice, me dire de quel côté dois-je aller ?
Ca dépend de l'endroit où vous voulez vous rendre, répondit le chat"
Lewis Carrol
chaval est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/07/2006, 17h16   #6
Rédacteur
 
Inscription : mars 2004
Messages : 1 298
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 1 298
Points : 1 450
Points : 1 450
Citation:
Envoyé par chaval
tu veux chercher une chaine à l'interieur d'un seul fichier ?

Code :
cat fichier | grep chaine
pourquoi faire un | et un cat ? pour faire gigotter le CPU ?
tel et la syntaxe donnée dans le man !
__________________
Marc
Slackware for ever ......
BASH - KSH ( http://marcg.developpez.com/ksh/ )
MarcG est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/08/2006, 07h02   #7
Membre Expert
 
Avatar de becket
 
Frédéric Brugmans
Informaticien multitâche
Inscription : février 2005
Messages : 661
Détails du profil
Informations personnelles :
Nom : Frédéric Brugmans

Informations professionnelles :
Activité : Informaticien multitâche

Informations forums :
Inscription : février 2005
Messages : 661
Points : 1 196
Points : 1 196
find ./ -name "*.audubon*" -or -exec grep -l audubon {} \;

Soit le nom contient audubon, soit le contenu du fichier contient audubon
becket est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/08/2006, 09h24   #8
Membre Expert
 
Homme
Inscription : mars 2004
Messages : 1 051
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : mars 2004
Messages : 1 051
Points : 1 031
Points : 1 031
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"
__________________
Chaval
__________________
"Monsieur le chat voudriez-vous, s'il vous plait, demanda Alice, me dire de quel côté dois-je aller ?
Ca dépend de l'endroit où vous voulez vous rendre, répondit le chat"
Lewis Carrol
chaval est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/08/2006, 15h08   #9
Membre émérite
 
Inscription : mai 2004
Messages : 709
Détails du profil
Informations personnelles :
Localisation : Belgique

Informations forums :
Inscription : mai 2004
Messages : 709
Points : 852
Points : 852
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 :
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:
Citation:
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 :
Citation:
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.
__________________
:q :q! :wq :w :w! :wq! :quit :quit! :help help helpquit quit quithelp
:quitplease :quitnow :leave :shit ^X^C ^C ^D ^Z ^Q QUITDAMMIT
Jabber: ripat at im.apinc.org
ripat est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/08/2006, 09h30   #10
Membre Expert
 
Homme
Inscription : mars 2004
Messages : 1 051
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : mars 2004
Messages : 1 051
Points : 1 031
Points : 1 031
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
__________________
Chaval
__________________
"Monsieur le chat voudriez-vous, s'il vous plait, demanda Alice, me dire de quel côté dois-je aller ?
Ca dépend de l'endroit où vous voulez vous rendre, répondit le chat"
Lewis Carrol
chaval est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/08/2006, 10h40   #11
Modérateur
 
Avatar de al1_24
 
Homme Alain
Ingénieur d'études décisionnel
Inscription : mai 2002
Messages : 4 446
Détails du profil
Informations personnelles :
Nom : Homme Alain
Âge : 51
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études décisionnel
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 4 446
Points : 7 546
Points : 7 546
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...
__________________
Modérateur Langage SQL
Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
N'oubliez pas le bouton et pensez aux balises [code]
Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
al1_24 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/08/2006, 11h16   #12
Membre émérite
 
Inscription : mai 2004
Messages : 709
Détails du profil
Informations personnelles :
Localisation : Belgique

Informations forums :
Inscription : mai 2004
Messages : 709
Points : 852
Points : 852
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.
__________________
:q :q! :wq :w :w! :wq! :quit :quit! :help help helpquit quit quithelp
:quitplease :quitnow :leave :shit ^X^C ^C ^D ^Z ^Q QUITDAMMIT
Jabber: ripat at im.apinc.org
ripat est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/08/2006, 17h46   #13
Membre émérite
 
Avatar de julien.63
 
Inscription : décembre 2005
Messages : 1 322
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 1 322
Points : 981
Points : 981
Envoyer un message via MSN à julien.63
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.
@+
julien.63 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h23.


 
 
 
 
Partenaires

Hébergement Web