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 11/05/2005, 12h05   #1
dug
Membre du Club
 
Inscription : mai 2002
Messages : 151
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 151
Points : 50
Points : 50
Envoyer un message via ICQ à dug Envoyer un message via MSN à dug
Par défaut Petit problème avec grep

Bonjour,

un ptit question facile:

j'ai un fichier contenant plusieurs lignes du genre:

16 S blalalablaTypeblobloblo
17 T blalalablaTypeblobloblo

cat fichier | grep "[0-9][0-9] T*"

je souhaite récupèrer évidemment la ligne 17 et non pas 16, mais cela ne fonctionne pas
je ne trouve pas pour qu'il interprète correctement " ", il me le prend comme une "*"

un peu d'aide please...
dug est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2005, 12h30   #2
Rédacteur
 
Inscription : mars 2002
Messages : 557
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 557
Points : 673
Points : 673
-e pour que la chaîne soit considérée comme une regexp il me semble :

cat fichier | grep -e "[0-9][0-9] T*"
Nightfall est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2005, 12h41   #3
dug
Membre du Club
 
Inscription : mai 2002
Messages : 151
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 151
Points : 50
Points : 50
Envoyer un message via ICQ à dug Envoyer un message via MSN à dug
merci de ta réponse,
mais cela ne fonctionne pas...

je travaille sur Sun OS 5.7, et la commande avec le paramètre -e ne fonctionne pas

Le code entre les crochets fonctionnent, donc je suppose que les expressions régulières sont activées.

j'ai testé cela sans résultat:
cat fichier | grep "[0-9][0-9][ ]T*"

c'est normale qu'il me traduit l'espace comme une étoile ?
comment faire autrement ?
dug est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2005, 13h08   #4
Modérateur
 
Avatar de ggnore
 
Inscription : juillet 2004
Messages : 2 246
Détails du profil
Informations personnelles :
Âge : 33

Informations forums :
Inscription : juillet 2004
Messages : 2 246
Points : 1 903
Points : 1 903
1. pourquoi tu mets l'étoile ? ça ne sert à rien
2. tu devrais peut être essayer de protéger ton espace avec un backslash '\'
3. les guillemets sont ils vraiment nécessaires ?
4. tu pourrais mettre ^ en début de ligne pour spécifier que tu veux que les 2 chiffres doivent être systématiquement en début de ligne
5. je ferais :
__________________
Toutes les vertus des hommes se perdent dans l’intérêt comme les fleuves se perdent dans la mer.
ggnore est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2005, 13h21   #5
Membre du Club
 
Inscription : décembre 2004
Messages : 63
Détails du profil
Informations forums :
Inscription : décembre 2004
Messages : 63
Points : 65
Points : 65
tu devrais plutot essayer ça
Code :
1
2
3
4
 
   cat fichier | grep "[0-9][0-9] T.*"
ou
    cat fichier | egrep "[0-9]{2} T.*"
fallait rajouter le ".*" a la fin pour reconnaitre tout la ligne sinon le egrep c'est les regexp etendu
guemairm est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2005, 14h04   #6
Membre Expert
 
Avatar de 2Eurocents
 
Inscription : septembre 2004
Messages : 2 180
Détails du profil
Informations personnelles :
Âge : 42

Informations forums :
Inscription : septembre 2004
Messages : 2 180
Points : 2 442
Points : 2 442
Je maintiens le premier point de ggnore : le ".*" est superflu ... une fois qu'on a le T, on se fiche du reste ... pas la peine de le faire matcher avec une chaine bidon.

Sinon, si l'on mets des guillemets, pas besoin de backslasher le blanc (points 2 et 3).

Pour le quatrième point ... il faut voir ... Si le fichier contient des lignes - avec le ^ elles ne seront pas prises,
- sans le ^ elles seront prises.

Code :
cat fichier | grep "^[0-9][0-9] T"
me paraît pertinent.


Bonne continuation
__________________
La FAQ Perl est par ici
: La fonction "Rechercher", on aurait dû la nommer "Retrouver" - essayez et vous verrez pourquoi !
2Eurocents est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2005, 14h17   #7
dug
Membre du Club
 
Inscription : mai 2002
Messages : 151
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 151
Points : 50
Points : 50
Envoyer un message via ICQ à dug Envoyer un message via MSN à dug
merci pour vos réponses, cela fonctionne bien avec cette commande:
cat fichier | grep "^[0-9][0-9] T"


par contre, je n'ai pas vraiment compris pourquoi le faite de faire la recherche en début de ligne (^) change l'interprétation de l'espace, en plusieurs...

quelqu'un peut m'éclairé ?
dug est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2005, 14h20   #8
Modérateur
 
Avatar de ggnore
 
Inscription : juillet 2004
Messages : 2 246
Détails du profil
Informations personnelles :
Âge : 33

Informations forums :
Inscription : juillet 2004
Messages : 2 246
Points : 1 903
Points : 1 903
Citation:
Envoyé par dug
merci pour vos réponses, cela fonctionne bien avec cette commande:
cat fichier | grep "^[0-9][0-9] T"


par contre, je n'ai pas vraiment compris pourquoi le faite de faire la recherche en début de ligne (^) change l'interprétation de l'espace, en plusieurs...

quelqu'un peut m'éclairé ?
le '^' signifie que grep ne renvoie que les lignes qui commencent avec le motif que tu as créé. ça n'a rien à voir avec les espaces.

Par contre, tu noteras que dans l'expression de 2eurocent, il n'y a pas d'*
Peut être que l'étoile provoquait un comportement spécial...
__________________
Toutes les vertus des hommes se perdent dans l’intérêt comme les fleuves se perdent dans la mer.
ggnore est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2005, 14h31   #9
dug
Membre du Club
 
Inscription : mai 2002
Messages : 151
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 151
Points : 50
Points : 50
Envoyer un message via ICQ à dug Envoyer un message via MSN à dug
tu as raison ggnore, j'ai regardé en détail et voilà le résultat:

cat /scv/tmp/as_liste_proc.22562 | grep "[0-9][0-9] T*"
-> ne fonctionne pas

cat /scv/tmp/as_liste_proc.22562 | grep "^[0-9][0-9] T*"
-> ne fonctionne pas

cat /scv/tmp/as_liste_proc.22562 | grep "^[0-9][0-9] T"
-> fonctionne

tout de même, même avec de la bonne volonté pour trouver la logique, c'est pas toujours évident sur certaine commande...
là je vois pas la logique, le 2e cas devrait marcher...
dug est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2005, 14h35   #10
Modérateur
 
Avatar de ggnore
 
Inscription : juillet 2004
Messages : 2 246
Détails du profil
Informations personnelles :
Âge : 33

Informations forums :
Inscription : juillet 2004
Messages : 2 246
Points : 1 903
Points : 1 903
le "pattern" que tu mets dérrière ton grep obéis à des lois qui lui sont propres. ça n'est pas du shell.

Tu n'as pas l'air de comprendre que le caractère étoile ne signifie pas
forcément "chaîne composée de tous caractères de longueur indéterminée".

fais davantage de recherches sur grep ...
__________________
Toutes les vertus des hommes se perdent dans l’intérêt comme les fleuves se perdent dans la mer.
ggnore est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2005, 14h36   #11
Membre Expert
 
Avatar de 2Eurocents
 
Inscription : septembre 2004
Messages : 2 180
Détails du profil
Informations personnelles :
Âge : 42

Informations forums :
Inscription : septembre 2004
Messages : 2 180
Points : 2 442
Points : 2 442
Dans une expression rationnelle, "*" ne veut rien dire seule.

C'est un multiplicateur de l'élément devant.

Ainsi "toto *" matchera toto avec 0 à n blanc derrière.

Un caractère quelconque, c'est ".". Donc 0 à n caractères quelconques, c'est ".*".

C'est mieux, comme ça ?


Pour ce qui est de commencer l'interprétation en début de ligne, ça change simplement le comportement vis à vis des lignes qui commencent par le motif ou celles qui contiennent, sans nécessairement commencer par lui.

Bonne continuation.
__________________
La FAQ Perl est par ici
: La fonction "Rechercher", on aurait dû la nommer "Retrouver" - essayez et vous verrez pourquoi !
2Eurocents est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2005, 15h15   #12
dug
Membre du Club
 
Inscription : mai 2002
Messages : 151
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 151
Points : 50
Points : 50
Envoyer un message via ICQ à dug Envoyer un message via MSN à dug
ouaip, je comprends mieux

merci de vos réponses !
dug est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2005, 15h29   #13
Membre Expert
 
Avatar de 2Eurocents
 
Inscription : septembre 2004
Messages : 2 180
Détails du profil
Informations personnelles :
Âge : 42

Informations forums :
Inscription : septembre 2004
Messages : 2 180
Points : 2 442
Points : 2 442
Alors je crois qu'un petit tag [Résolu] sur le sujet devrait approcher à grands pas .

Utilise le petit bouton, en bas à gauche de l'interface, quand tu visualises le fil.

Bonne continuation.
__________________
La FAQ Perl est par ici
: La fonction "Rechercher", on aurait dû la nommer "Retrouver" - essayez et vous verrez pourquoi !
2Eurocents est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2005, 15h34   #14
dug
Membre du Club
 
Inscription : mai 2002
Messages : 151
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 151
Points : 50
Points : 50
Envoyer un message via ICQ à dug Envoyer un message via MSN à dug
c'est fait, j'avais oublié
dug 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 21h44.


 
 
 
 
Partenaires

Hébergement Web