A voir également:
- [commande grep] question simple
- Invite de commande - Guide
- Commande terminal mac - Guide
- Iphone 14 simple - Guide
- Simple ocr - Télécharger - Bureautique
- Commande dism - Guide
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
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
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
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
10 mars 2005 à 14:01
Je suis nul en expression régulières mais je ferais un truc comme :
ou bien
Il y a surement mieux.
cat fichier |grep ` content `
ou bien
cat fichier |grep content|grep [^mecontent]
Il y a surement mieux.
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
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 :
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';-)
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 ??? "
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 ??? "
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
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
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
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
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' ` ";-)
J ai une erreur quand je fais echo " `cat fichier | grep -E '\bcontent\b' ` "
-->
grep: illegal option -- E
Usage: grep -hblcnsviw pattern file . . .
-->
grep: illegal option -- E
Usage: grep -hblcnsviw pattern file . . .
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
10 mars 2005 à 14:40
Essaye alors avec "egrep" à la place de "grep -E" :
echo "`cat fichier | egrep '\bcontent\b'`";-)
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 ...
[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
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
http://www.commentcamarche.net/forum/affich-1361557#4
... si ??
Dal
qui se sent seul tout à coup
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
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
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
[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
10 mars 2005 à 15:36
:DDDDD <--- content (sans grep, ni rien, et hop !)
Dal
Dal
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 ...
si dans le fichier tu as
1-content
2-mecontent
3-(content)
alors la ligne 1 et 2 sera sortie ...
[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
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
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
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.
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.
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.
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.
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)
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)
[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
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
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
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'
par chance toutes les lignes ou se trouve le mot "content" ont moins de 40 caracteres
solution :
cat fichier | grep content | awk 'length<40'
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
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:
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.
++
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.
++
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
:( !
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
:( !
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: $????