|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre du Club
![]() |
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... |
|
|
00
|
|
|
#2 |
![]() ![]() Inscription : mars 2002 Messages : 557 ![]() |
-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*" |
|
|
00
|
|
|
#3 |
|
Membre du Club
![]() |
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 ? |
|
|
00
|
|
|
#4 |
![]() ![]() Inscription : juillet 2004 Messages : 2 246 ![]() |
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. |
|
|
00
|
|
|
#5 | ||
|
Membre du Club
![]() Inscription : décembre 2004 Messages : 63 ![]() |
tu devrais plutot essayer ça
Code :
|
||
|
|
00
|
|
|
#6 |
|
Membre Expert
![]() Inscription : septembre 2004 Messages : 2 180 ![]() |
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. me paraît pertinent. Bonne continuation
__________________
|
|
|
00
|
|
|
#7 |
|
Membre du Club
![]() |
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é ? |
|
|
00
|
|
|
#8 | |
![]() ![]() Inscription : juillet 2004 Messages : 2 246 ![]() |
Citation:
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. |
|
|
|
00
|
|
|
#9 |
|
Membre du Club
![]() |
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... |
|
|
00
|
|
|
#10 |
![]() ![]() Inscription : juillet 2004 Messages : 2 246 ![]() |
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. |
|
|
00
|
|
|
#11 |
|
Membre Expert
![]() Inscription : septembre 2004 Messages : 2 180 ![]() |
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.
__________________
|
|
|
00
|
|
|
#12 |
|
Membre du Club
![]() |
ouaip, je comprends mieux
merci de vos réponses ! |
|
|
00
|
|
|
#13 |
|
Membre Expert
![]() Inscription : septembre 2004 Messages : 2 180 ![]() |
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.
__________________
|
|
|
00
|
|
|
#14 |
|
Membre du Club
![]() |
c'est fait, j'avais oublié
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com