[commande grep] question simple

Fermé
d-bax - 10 mars 2005 à 13:21
 chapo - 14 mars 2005 à 10:26
Bonjour,

Je souhaite faire une recherche, par exemple sur le mot "content" mais je ne veux pas retrouver le mot "mecontent" je voudrais qu il recherche exactement ma requete.
Comment dois-je faire?

Merci
A voir également:

17 réponses

[Dal] Messages postés 6204 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 27 février 2025 1 101
10 mars 2005 à 16:24
Re d-bax :)

Ta question initiale était imprécise, car tu n'indiquais pas celà.

... et tu réponds incomplètement à la question "qu'est-ce que tu cherches" car on irait plus vite si tu disais ce qu'il peut (doit) y avoir après le mot et/ou avant le mot : rien ? espace(s) ?, ponctuation (exemple : virgule, point), guillements, apostrophe, etc., pour que tu considères le résultat juste (visiblement celà fait partie de ta recherche, donc).

On y verrait aussi un peu plus clair aussi si tu disais en quoi consiste ton fichier de départ (si c'est un texte avec des phrases, s'il a un format particulier comme celui de ton exemple, etc.).

Aides nous un peu, stp.


Dal
1
epinard Messages postés 198 Date d'inscription mardi 7 décembre 2004 Statut Membre Dernière intervention 5 mars 2006 27
10 mars 2005 à 14:01
Je suis nul en expression régulières mais je ferais un truc comme :
cat fichier |grep `  content `

ou bien
cat fichier |grep content|grep [^mecontent]


Il y a surement mieux.
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 898
10 mars 2005 à 14:09
Salut,

Il faut utiliser "grep" avec l'option "-E" (pour considérer la chaine comme une expression régulière étendue), couplée au méta-caractère "\b" (la chaîne est ancrée à un mot), ce qui donne :
cat fichier  |  grep -E '\bcontent\b'
;-)
0
ni l un ni l autre ne marche :( . De plus content et mecontent c etait un exemple je ne veux pas les sorties "*content*"
En effet en plus j execute ca dans un script csh donc avec les guillemets je sais pas comment faire
-->
echo "`cat file | grep content ??? "
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
[Dal] Messages postés 6204 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 27 février 2025 1 101
10 mars 2005 à 14:23
Salut d-bax,

Chez moi, grep a une option "-w", que le manuel décrit comme çà :

-w, --word-regexp
Select only those lines containing matches that form whole
words. The test is that the matching substring must either be
at the beginning of the line, or preceded by a non-word con-
stituent character. Similarly, it must be either at the end of
the line or followed by a non-word constituent character. Word-
constituent characters are letters, digits, and the underscore.


Avec cette option

echo "mécontent" | grep -w content
ne retourne rien

echo "très content" | grep -w content
retourne la ligne

Il faut veiller à ce que tes variables d'environnement soient bien paramétrées (LC_ALL, LC_CTYPE, LANG) pour que grep s'y retrouve dans les caractères français (sinon les caractères accentués sont considérés comme non alphabétiques ou des caractères séparateurs).


Dal
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 898
10 mars 2005 à 14:26
La preuve que ça marche :
[jp@Mandrake tmpfs]$ cat fichier
Je souhaite faire une recherche, par exemple sur le mot "content" mais
je ne veux pas retrouver le
mot "mecontent"
je voudrais qu il recherche exactement ma requete, je me contenterai d'un exemple.

[jp@Mandrake tmpfs]$ cat fichier | grep -E '\bcontent\b'
Je souhaite faire une recherche, par exemple sur le mot "content" mais
[jp@Mandrake tmpfs]$
Sinon pour la syntaxe avec les guillemets, il faut encadrer la commande par des "quotes inversées" :
echo " `cat fichier  |  grep -E '\bcontent\b' ` "
;-)
0
J ai une erreur quand je fais echo " `cat fichier | grep -E '\bcontent\b' ` "
-->
grep: illegal option -- E
Usage: grep -hblcnsviw pattern file . . .
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 898
10 mars 2005 à 14:40
Essaye alors avec "egrep" à la place de "grep -E" :
echo "`cat fichier | egrep  '\bcontent\b'`"
;-)
0
Plus d erreur avec le egrep mais par contre il me sort ausun resultat il ne retrouve plus rien cette fois . Aie je me casse la tete ... Help me please ...
0
[Dal] Messages postés 6204 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 27 février 2025 1 101
10 mars 2005 à 14:59
hmm... je ne suis pas le seul à avoir l'option "-w" telle que décrite là :

http://www.commentcamarche.net/forum/affich-1361557#4

... si ??


Dal
qui se sent seul tout à coup
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 898
10 mars 2005 à 15:17
Salut [Dal],

Désolé mais j'avais zappé ton message :-( (c'est un petit inconvénient du forum qui arrive quand on ne fais pas bien gaffe aux numéros des posts..)
Merci pour la précision ;-))

Mais non t'es pas tout seul, t'as juste était "zappé" un instant ;-DDDDD
0
[Dal] Messages postés 6204 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 27 février 2025 1 101 > jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020
10 mars 2005 à 15:36
:DDDDD <--- content (sans grep, ni rien, et hop !)


Dal
0
le grep -w ne marche pas car il trouve par exemple --> "(content)"
si dans le fichier tu as
1-content
2-mecontent
3-(content)

alors la ligne 1 et 2 sera sortie ...
0
[Dal] Messages postés 6204 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 27 février 2025 1 101
10 mars 2005 à 15:48
Salut d-bax,

Je pense que tu veux dire 1- et 3-.

C'est normal de grep -w sorte (content), car son algorithme détecte les "mots" en utilisant, pour les distinguer, notamment des caractères séparateurs qui dans la syntaxe d'une langue déterminée ne font pas partie de l'orthographe de mots du dictionnaire.

En français, lorsque tu mets un mot entre parenthèses, le mot reste le même.

Que veux-tu rechercher exactement ?


Dal
0
effectivement je voulais dire 1 et 3...

Je veux afficher les lignes d un fichier qui contiennent exactement le mot que je recherche , si ce mot est entre parenthese (ou carecteres speciaux) je ne veux pas qu il s affiche.
0
effectivement je voulais dire 1 et 3...

Je veux afficher les lignes d un fichier qui contiennent exactement le mot que je recherche , si ce mot est entre parenthese (ou carecteres speciaux) je ne veux pas qu il s affiche.
0
Justement il me semble que j ai bien repondu a ta question.
En pratique, je cherche le mot content, je peux aussi bien trouver dans ce fichier : content mecontent (content) "content" ,content>
je ne vais donc pas chercher toutes les possibilite qui existe ...

je veux chercher le mot content SEUL
exemple de fichier :
1- je suis content
2- content je suis
3- je suis mecontent
4- je suis pas (content)
5- je suis "content"
6- je suis -content*
...
dans ce cas je veux que seul la ligne 1 de ce fichier soit affichee.
En fait faudrait que je puisse par grep dire :
tu sors le mot content quand il a un espace devant et derriere (attention devant ca veux rien dire si le mot est en debut de ligne)
0
[Dal] Messages postés 6204 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 27 février 2025 1 101
10 mars 2005 à 17:34
Sur ton fichier d'exemple, la commande suivante renvoie ce que tu veux :

cat test.txt | grep -v "^.[0123456789]*- content " | grep " content "

Celà suppose que chaque ligne commence par un chiffre ou un nombre qui soit immédiatement suivi d'un tiret et d'un espace pour que l'exception "ca veux rien dire si le mot est en debut de ligne" soit prise en compte.

si tes lignes commencent par quelque chose d'arbitraire, mais que tu ne veux pas retenir les cas où elles commencent par un espace et par "content" ou par "content" sans espace avant, alors la ligne appropriée serait :

cat test.txt | grep -v "^ content " | grep " content "


Dal
0
merci pour votre aide je m en suis sorti avec l aide de awk.

par chance toutes les lignes ou se trouve le mot "content" ont moins de 40 caracteres
solution :
cat fichier | grep content | awk 'length<40'
0
asevere Messages postés 13095 Date d'inscription lundi 28 janvier 2002 Statut Webmaster Dernière intervention 23 novembre 2024 426
11 mars 2005 à 22:10
Mouais...

Pas trés optimisé tout ça...
Si tu dois lire ton fichier pour compter le nombre de caractéres des lignes ou se trouvent "content" c'est un peu idiot de ne pas prendre un stylo et de les marquer a ce moment là ;)

Un truc comme:
cat fichier| tr -s ' ' | grep -e "[^\^] content\(\ \|\$\)"
ne ferai t-il pas l'affaire?( à tester)

On cherche quelque content précédé d'un espace non précédé d'un debut de ligne, et suivi soit d'un espace, soit d'une fin de ligne.
Le tout en ayant pris soin de supprimer les éventuels espaces doubles.

++
0
Ca c est sur que l on peut surement optimiser ma solution n est pas terrible.

Mais la tienne ne fonctionne pas non plus :( -->

1ere erreur : Variable name must contain alphanumeric characters
il manque pas un numero d argument ici ?
cat fichier| tr -s ' ' | grep -e "[^\^] content\(\ \|\$????\)"

2ieme erreur : quand je met un n umero d argument
grep: illegal option -- e

:( !
0
chapo > d-bax
14 mars 2005 à 10:26
cat fichier| tr -s ' ' | grep -e "[^\^] content\(\ \|\$????\)" 
Le probleme se situe dans la modification que tu as fait de l'expression précédente.

\(\ \|\$????\): Dans cette partie de l'expression, le \$ représente une fin de ligne et ne peut donc pas etre suivi de quoi que ce soit. Il b'est pas non plus forcément nécéssaire de l'échapper.

Variable name must contain alphanumeric characters
il manque pas un numero d argument ici ?
La variable en question, telle que considérée par grep est: $????
0