Pages : 1
#1 Le 09/03/2013, à 14:23
- Alecto
[resolu]grep python & terminal
Bonjour,
Je développe une application web en python.
J'utilise geany comme éditeur.
Je suis sous cubuntu 12.10.
Je souhaite faire le point des dépendances pour mon programme.
Je cherche donc dans le source toutes les citations de fichiers externes.
Jusque là c'est banal.
J'ai pensé à grep là encore très banal.
J'ai créé une expression rationnelle (certes perfectible) qui repère les occurrences de citation :
[a-zA-Z0-9\-_]+\.[a-zA-Z0-9\-_]+['|"]
En résumé je cherche une suite de caractère composée de lettres, de chiffres, du tiret - et de l'underscore _
Cette première suite de caractère doit être suivie du point . puis d'une autres suite de caractère comme la première
Et enfin le motif se termine soit par une simple guillemet ' ou un double guillement "
Avec geany l'expression fonctionne bien et trouve le motif dans mon source.
Avec kiki çà fonctionne aussi.
Je souhaite avec grep avoir une sorte d'index avec la ligne son numéro où apparaît le motif.
j'ai donc saisi :
grep -n monMotif monFichier
Et là çà devient pas banal.
La réponse est soit rien du tout soit un prompt > dont j'ignore d'ou il vient.
Il doit y avoir une évidence qui m'aveugle !?
D'avance merci.
Dernière modification par Alecto (Le 09/03/2013, à 15:57)
Le monde est tellement con... on dirait que c'est moi qui fait tout !
Hors ligne
#2 Le 09/03/2013, à 14:43
- miniSeb
Re : [resolu]grep python & terminal
[a-zA-Z0-9\-_]+\.[a-zA-Z0-9\-_]+['|"]
Il faut échapper les guillemets (' et ") dans ['|"]
[a-zA-Z0-9\-_]+\.[a-zA-Z0-9\-_]+[\'|\"]
En théorie ça devrait faire l'affaire
Hors ligne
#3 Le 09/03/2013, à 14:51
- pingouinux
Re : [resolu]grep python & terminal
Bonjour,
Je propose ceci :
egrep '[a-zA-Z0-9_\-]+\.[a-zA-Z0-9_\-]+["'"']" fichier
Ajouté :
On peut même simplifier un peu :
egrep '[a-zA-Z0-9_-]+\.[a-zA-Z0-9_-]+["'"']" fichier
Édité : Il y a nettement plus simple (voir remarque de tiramiseb #7)
egrep "[a-zA-Z0-9_-]+\.[a-zA-Z0-9_-]+[\"']" fichier
Dernière modification par pingouinux (Le 10/03/2013, à 10:48)
Hors ligne
#4 Le 09/03/2013, à 15:22
- Alecto
Re : [resolu]grep python & terminal
Avec la proposition de MiniSeb j'obtiens :
alecto$ grep -n [a-zA-Z0-9\-_]+\.[a-zA-Z0-9\-_]+[\'|\"] monfic.py
grep: Fin d'intervalle invalide
"] : commande introuvable
Merci tout de même.
Avec celle de Pingouinux et l'option -n j'obtiens ce que je veux
Je suis content mais toujours aussi idiot !
Je vois bien le remplacement de [a-zA-Z0-9\-_] par [a-zA-Z0-9_\-]
Mais je ne comprends pas la fin : ["'"']" ni le ' du début
Je note en tout cas que la réponse aux regex est assez variable suivant l'outil qu'on utilise.
Merci en tout cas pour la rapidité et l'efficacité de réponse
Le monde est tellement con... on dirait que c'est moi qui fait tout !
Hors ligne
#5 Le 09/03/2013, à 18:46
- pingouinux
Re : [resolu]grep python & terminal
@Alecto #4 :
En fait, on veut cette expression
[a-zA-Z0-9_-]+\.[a-zA-Z0-9_-]+["']
À cause du " et du ' qu'elle contient, on la sépare en 2 expressions.
L'une entre ' ' et qui contient un "
'[a-zA-Z0-9_-]+\.[a-zA-Z0-9_-]+["'
L'autre entre " " et qui contient un '
"']"
C'est un peu tarabiscoté, j'en conviens, mais je ne m'en suis pas sorti autrement.
Hors ligne
#6 Le 10/03/2013, à 00:00
- Alecto
Re : [resolu]grep python & terminal
Alors là... chapeau !
C'est de la haute voltige...
Si çà se trouve ce genre d'utilitaire doit (ou devrait) exister dans un environnement de développement intégré mais c'est bon pour les neurones de se fabriquer l'outil.
Encore merci.
Le monde est tellement con... on dirait que c'est moi qui fait tout !
Hors ligne
#7 Le 10/03/2013, à 10:10
- tiramiseb
Re : [resolu]grep python & terminal
C'est un peu tarabiscoté, j'en conviens, mais je ne m'en suis pas sorti autrement.
Euh... En échappant celui qui est utilisé pour définir la chaîne...
"[a-zA-Z0-9_-]+\.[a-zA-Z0-9_-]+[\"']"
... non ?
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
Hors ligne
#8 Le 10/03/2013, à 10:45
- pingouinux
Re : [resolu]grep python & terminal
@tiramiseb #7 :
Tu as raison, ça marche. Je ne sais pas ce que j'ai bricolé, c'est la première chose que je croyais avoir essayée…:/
Édité :
En fait, j'avais dû essayer ça, qui ne marche pas :
$ egrep '[a-zA-Z0-9_-]+\.[a-zA-Z0-9_-]+["\']' fichier
> ^C
Dernière modification par pingouinux (Le 10/03/2013, à 10:52)
Hors ligne
#9 Le 10/03/2013, à 11:07
- tiramiseb
Re : [resolu]grep python & terminal
Oui, avec l'apostrophe ça ne marche pas, j'avais essayé aussi... À mon avis ça vient du fait que dans ce cas le shell n'interprète pas ce qu'il y a à l'intérieur... Du coup il n'interprète pas l'échappement non plus...
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
Hors ligne