Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 wink

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 ?

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...

Hors ligne