Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Comportement de grep

13 réponses
Avatar
dominique
Bonjour,
Je me mets aux expressions régulières et j'ai quelque difficulté avec
les options de grep.
Pourquoi ai-je cette réponse (entrée standard):
[normal@localhost Temp]$ cat *.DOC | grep -l grep
(entrée standard)

Je sais que dans 3 fichier .DOC (grep pour Windows), j'ai le motif «
grep ». Pourquoi, avec l'option -l, ma recherche ne me renvoie-t-elle
pas les noms des fichiers où elle le trouve ?
Merci et bonne journée,
Dominique

PS : ces fichiers.DOC sont de faux documents MSoffice. Il s'agit de
simples fichiers texte lisibles avec vim.

10 réponses

1 2
Avatar
Michel Tatoute
dominique wrote:

Bonjour,
Je me mets aux expressions régulières et j'ai quelque difficulté avec
les options de grep.
Pourquoi ai-je cette réponse (entrée standard):
[ Temp]$ cat *.DOC | grep -l grep
(entrée standard)

Je sais que dans 3 fichier .DOC (grep pour Windows), j'ai le motif «
grep ». Pourquoi, avec l'option -l, ma recherche ne me renvoie-t-elle
pas les noms des fichiers où elle le trouve ?


par ce qu'il fallait taper:
$ grep -l grep *.DOC

sinon grep ignore de quel fichier DOC provient ce qu'il lit. Il voit un flux
contenant le mot grep sur l'entree standard, donc il affiche poliment
(option -l) "entree standard"

Merci et bonne journée,
de rien

Dominique


Michel.

Avatar
Vincent Bernat
OoO En ce doux début de matinée du lundi 05 juin 2006, vers 08:01,
dominique disait:

Pourquoi ai-je cette réponse (entrée standard):
[ Temp]$ cat *.DOC | grep -l grep
(entrée standard)

Je sais que dans 3 fichier .DOC (grep pour Windows), j'ai le motif «
grep ». Pourquoi, avec l'option -l, ma recherche ne me renvoie-t-elle
pas les noms des fichiers où elle le trouve ?


La commande grep telle que tu l'emploies ne connais pas le nom des
fichiers. C'est la commande cat qui connaît le nom des trois fichiers
et envoie leurs contenus sur l'entrée standard de grep. Si tu veux que
grep connaisse le nom des fichiers, tu dois faire :
grep -l grep *.DOC
--
/* Binary compatibility is good American knowhow fuckin' up. */
2.2.16 /usr/src/linux/arch/sparc/kernel/sunos_ioctl.c

Avatar
dominique

La commande grep telle que tu l'emploies ne connais pas le nom des
fichiers. C'est la commande cat qui connaît le nom des trois fichiers
et envoie leurs contenus sur l'entrée standard de grep. Si tu veux que
grep connaisse le nom des fichiers, tu dois faire :
grep -l grep *.DOC


Compris !
Cat n'indique pas le nom du fichier ! Je n'avais pas saisi cette nuance !
Merci à vous,
Dominique

Avatar
Matthieu Moy
dominique writes:

Bonjour,
Je me mets aux expressions régulières et j'ai quelque difficulté avec
les options de grep.
Pourquoi ai-je cette réponse (entrée standard):
[ Temp]$ cat *.DOC | grep -l grep
(entrée standard)


UUOC !

(Useless Use Of Cat)

(et dans ce cas, pas seulement useless, mais aussi nuisible !)

--
Matthieu

Avatar
dominique

UUOC !

(Useless Use Of Cat)

(et dans ce cas, pas seulement useless, mais aussi nuisible !)



Je ne comprends pas.
Dominique

Avatar
Matthieu Moy
dominique writes:


UUOC !
(Useless Use Of Cat)
(et dans ce cas, pas seulement useless, mais aussi nuisible !)



Je ne comprends pas.
Dominique


Quand tu écris quelque chose comme

$ cat fichier | commande

la commande "cat" est inutile. Dans tous les cas, tu peux écrire

$ commande < fichier

(tu ne lances qu'un processus, et non deux) et la plupart du temps, la
commande accepte aussi un nom de fichier en argument pour lire dans ce
fichier a la place de l'entrée standard.

Dans ton cas, le coup de la redirection n'aurait effectivement pas
marché vu que tu as trois fichiers, mais le passage en argument est la
bonne solution.

fais une recherche sur le Web sur « UUOC » si tu veux, tu verras que
c'est en fait un grand classique.

(la semaine prochaine, nous verrons le « UUOL », ou Useless Use Of
Ls ;-) )

--
Matthieu


Avatar
Sébastien Monbrun aka TiChou
Dans le message <news:,
*Matthieu Moy* tapota sur f.c.o.l.configuration :

[ Temp]$ cat *.DOC | grep -l grep
(entrée standard)


UUOC !


Ah je ne suis pas totalement d'accord ! :-) Tout dépend du résultat souhaité
et il y a des cas où la commande 'cat' peut alors être utilisée à bon
escient.
En effet, le résultat de la commande grep peut différer selon si elle traite
les fichiers un par un ou selon si elle traite en une seule fois les données
concaténées et passées sur l'entrée standard.

--
Sébastien Monbrun aka TiChou


Avatar
Nicolas George
dominique wrote in message <4483c8bf$0$20149$:
Je sais que dans 3 fichier .DOC (grep pour Windows), j'ai le motif «
grep ». Pourquoi, avec l'option -l, ma recherche ne me renvoie-t-elle
pas les noms des fichiers où elle le trouve ?


Comment grep pourrait-il connaître les noms des fichiers ?

Avatar
dominique
dominique wrote in message <4483c8bf$0$20149$:
Je sais que dans 3 fichier .DOC (grep pour Windows), j'ai le motif «
grep ». Pourquoi, avec l'option -l, ma recherche ne me renvoie-t-elle
pas les noms des fichiers où elle le trouve ?


Comment grep pourrait-il connaître les noms des fichiers ?


J'ai compris que, avec cat en première commande, grep ne connaissait pas
l'origine des informations reçues.
En revanche, effectivement, avec :
grep -l mon_motif *.doc

Exemple :
[ ~]$ grep -l alias .*
.bash_profile
.bashrc

Question subsidiaire, comment obtenir, en réponse, le chemin complet des
fichiers trouvés ?
Merci et bonne journée,
Dominique


Avatar
Matthieu Moy
dominique writes:

Question subsidiaire, comment obtenir, en réponse, le chemin complet
des fichiers trouvés ?


En donnant les chemins complets sur la ligne de commande.

grep foo ~/.*

qui sera expansé par ton shell en

grep foo /home/dominique/.bashrc /home/dominique/.bash_history

ou quelque chose comme ça.

--
Matthieu

1 2