OVH Cloud OVH Cloud

grep ls et pipe sont au terminal

30 réponses
Avatar
pere.noel
en ruby j'ai un problème avec "Date", je dois chercher quel est le
sagouin de fichier qui met le boxon.

bon, là je fais :

grep -n [Date] -f le fichier

mais c'est un peu fastidieux, j'aimerais bien, au moins filer la sortie
de ls à grep, mais comme les arguments de fichiers se trouvent en
dernier, comment fait-on ?

je suppose que ce n'est pas un pipe...

et pour le faire récursivement ?

--
une bévue

10 réponses

1 2 3
Avatar
pere.noel
Une bévue wrote:

grep -n [Date] -f le fichier


ne marche pas car j'ai un fichier date.rb qui contient Date et qui n'est
pas trouvé...

la syntaxe du pattern doit-être incorrecte.

mais c'est un peu fastidieux, j'aimerais bien, au moins filer la sortie
de ls à grep, mais comme les arguments de fichiers se trouvent en
dernier, comment fait-on ?



bon +/- inutile il suffit d'utiliser * dans le nom de fichier
je suppose que ce n'est pas un pipe...

et pour le faire récursivement ?


ça, c'est une autre affaire...
--
une bévue

Avatar
patpro ~ Patrick Proniewski
In article <1hc2so0.1j0c0hxecj2b3N%,
(Une bévue) wrote:

Une bévue wrote:

grep -n [Date] -f le fichier


ne marche pas car j'ai un fichier date.rb qui contient Date et qui n'est
pas trouvé...


grep -n Date *

bon +/- inutile il suffit d'utiliser * dans le nom de fichier


voilà :)


et pour le faire récursivement ?


ça, c'est une autre affaire...


man grep ?

-R, -r, --recursive
Read all files under each directory, recursively; this is equiv-
alent to the -d recurse option.


patpro


Avatar
pere.noel
patpro ~ Patrick Proniewski wrote:

man grep ?

-R, -r, --recursive
Read all files under each directory, recursively; this is equiv-
alent to the -d recurse option.


ouais merci, j'avais trouvé, après une bonne tasse de thé bien fort ;-)

tiens d'ailleurs j'ai voulu essayer une regex qui affiche toutes les
lignes contenant Date mais n'ayant pas # (commentaire) avant Date :

'^s*[^#].* Date ' ça ne m'a pas donné le résultat escompté, plutot
l'inverse d'ailleurs...
--
une bévue

Avatar
pere.noel
José Campos <jose.campos+ wrote:


que donne '^[^#n]* Date.*$' ?


Ah, nettement mieux, mais il me manque un :

Resources/ThirdParty/rexml/rexml.rb:24: Date = "2005/224"

le seul truc suspect que j'ai trouvé ;-)
(assignation d'une class Date à une string, en ruby je ne suis pas sûr,
mais en java faut courir rapidos auprès le disjoncteur...)


je n'ai pas pigé le pourquoi de ton n, ça me trouble, mon thé n'a pas
du être assez fort (deuxième tasse avalée pourtant).

ensuite la ligne ne commence pas nécessairement par # donc plutôt :
'^s*[^#n]* Date.*$' il peut y avoir des blancs avant, par contre si
dans la ligne j'ai :

Date = machintrucmuche #un exemple pour Jo ;-)

je veux cette ligne.

je cherche donc dans BookmarksMerge.app/Contents ce qui peut poser pb
chez toi ))

rien vu d'extraordinaire à part le truc ci-dessus...
--
une bévue

Avatar
blanc
Une bévue wrote:

que donne '^[^#n]* Date.*$' ?


Ah, nettement mieux, mais il me manque un :

Resources/ThirdParty/rexml/rexml.rb:24: Date = "2005/224"


C'est le caractère avant "Date" qui n'est pas reconnu (une tab au lieu
d'une espace ?). Pour l'avoir, il suffit d'enlever l'espace avant "Date"
dans ton motif.

je n'ai pas pigé le pourquoi de ton n, ça me trouble, mon thé n'a pas
du être assez fort (deuxième tasse avalée pourtant).


Pour éviter les sauts-ligne. Il y a certains systèmes de reg exp qui
acceptent des motifs sur plusieurs lignes

ensuite la ligne ne commence pas nécessairement par # donc plutôt :
'^s*[^#n]* Date.*$'


???
Dans le motif donné par Une bévue, le morceau [^#n]* signifie qu'il
n'y a ni # ni n entre le début de ligne (^) qui le précède et la
séquence " Date" qui le suit.


il peut y avoir des blancs avant, par contre si
dans la ligne j'ai :

Date = machintrucmuche #un exemple pour Jo ;-)

je veux cette ligne.


Ca doit marcher aussi puis qu'un blanc (espace ou tab) n'est ni un #, ni
un n.

JPaul.



--
/==/==- Jean-Paul BLANC
/ /--/--// quelque-part (somewhere)
|/| L | en (in)
/|| = ||| FRANCE


Avatar
pere.noel
José Campos <jose.campos+ wrote:


Oui parce que "Date" est précédé d'une tabulation, donc :
Find : '^[^#n]*sDate.*$'


ca c'est farpait (enfin presque) :
'^[^#n]*s* Date.*$' *

(cependant j'ai quand même quelques " KABDateProperty = 0x4"
dont je me fiche éperdument, l'option -w est peut-être inhibée en regx?)

résultat des course :

seule la ligne :
Resources/ThirdParty/rexml/rexml.rb:24: Date = "2005/224"
est suspecte à mes yeux...


j'ai l'impression que la syntaxe regex n'est pas la même en ruby et java
qu'avec grp mettre :

'^[^#n]*s+Date.*$' => plus de réponse
avec :

--
une bévue

Avatar
blanc
JPaul wrote:

Dans le motif donné par Une bévue, le morceau [^#n]* signifie qu'il
n'y a ni # ni n entre le début de ligne (^) qui le précède et la
séquence " Date" qui le suit.


Oups!... je voulais dire "...le motif donné par José..."

JPaul.

--
/==/==- Jean-Paul BLANC
/ /--/--// quelque-part (somewhere)
|/| L | en (in)
/|| = ||| FRANCE

Avatar
Vincent Lefevre
Dans l'article ,
patpro ~ Patrick Proniewski écrit:

In article <1hc2so0.1j0c0hxecj2b3N%,
(Une bévue) wrote:

Une bévue wrote:

grep -n [Date] -f le fichier


ne marche pas car j'ai un fichier date.rb qui contient Date et qui
n'est pas trouvé...



Note: le fichier en question contient des patterns.

grep -n Date *


En espérant qu'il n'y ait pas trop de fichiers. Sinon tu te retrouves
avec une erreur "argument list too long" (que ce soit sous Mac OS X
ou sous Linux -- la limite n'est peut-être pas la même dans les deux
cas). La solution est alors d'utiliser xargs ou find.

bon +/- inutile il suffit d'utiliser * dans le nom de fichier



* n'est pas dans le nom de fichier. Il est expansé par le shell, et
grep se retrouve avec une liste de fichiers.

voilà :)



et pour le faire récursivement ?


ça, c'est une autre affaire...


man grep ?

-R, -r, --recursive
Read all files under each directory, recursively; this is equiv-
alent to the -d recurse option.


Ou la solution **/* de zsh (cela permet d'être plus flexible sur les
fichiers à inclure), mais zsh doit générer la liste des fichiers avant
d'appeler grep, et cf ci-dessus.

--
Vincent Lefèvre - Web: <http://www.vinc17.org/>
100% accessible validated (X)HTML - Blog: <http://www.vinc17.org/blog/>
Work: CR INRIA - computer arithmetic / SPACES project at LORIA



Avatar
Vincent Lefevre
Dans l'article <1hc35uk.5u6ipm1pdcfb4N%,
Une bévue écrit:

José Campos <jose.campos+ wrote:
Oui parce que "Date" est précédé d'une tabulation, donc :
Find : '^[^#n]*sDate.*$'


ca c'est farpait (enfin presque) :
'^[^#n]*s* Date.*$' *


Un .*$ est inutile en fin de regexp pour grep, sauf éventuellement
si tu colores la partie matchée.

--
Vincent Lefèvre - Web: <http://www.vinc17.org/>
100% accessible validated (X)HTML - Blog: <http://www.vinc17.org/blog/>
Work: CR INRIA - computer arithmetic / SPACES project at LORIA


Avatar
Jérôme Laheurte
On Sun, 12 Mar 2006 07:20:28 +0100, Une bévue wrote:

en ruby j'ai un problème avec "Date", je dois chercher quel est le
sagouin de fichier qui met le boxon.

bon, là je fais :

grep -n [Date] -f le fichier

mais c'est un peu fastidieux, j'aimerais bien, au moins filer la sortie
de ls à grep, mais comme les arguments de fichiers se trouvent en
dernier, comment fait-on ?

je suppose que ce n'est pas un pipe...

et pour le faire récursivement ?


Perso j'utilise le bon vieux (pour des fichiers C par exemple)

find -name "*.c" | xargs grep monpattern

Trés pratique, xargs. Peut-être un peu bourrin ici mais dans d'autres
circonstances ça économise pas mal d'efforts...

1 2 3