#1 Le 28/04/2012, à 22:45
La commande grep
Salut tout le monde !
Je veux chercher, à l'aide de grep, les mots qui contiennent "vu" et se terminent par "m" dans un fichier.
Si quelqu'un peut m'aider et merci d'avance.
Hors ligne
#2 Le 28/04/2012, à 23:56
Re : La commande grep
Salut inoune,
tu veux donc utiliser grep avec 2 critères de sélection.
Je n'ai rien su trouver sur ce sujet dans le guide Unix de Lozano, ni dans le tutoriel vidéo (voir mon profil) ni avec "man grep". Franchement je ne suis pas encore un crac dans les commandes, mais j'imagine qu'on doit pouvoir se débrouiller avec une redirection dans le genre...
grep vu fichier.dat | grep 'm$'
Je n'ai pas encore testé...
Dernière modification par hibou7 (Le 28/04/2012, à 23:57)
Ubuntisan paisible et souvent nocturne sur un ordinosaure du 2e millénaire.
Ubuntu 12.04 LTS | CPU Pentium 4, 2.80GHz | CG ATI Radeon RV 100QY | RAM 2 Gio
Les tutos video d'Alexis Madrzejewski: http://www.tutoriels-video.fr/category/tutoriel-video/
Si GNU/Linux ne répond plus: le redémarrer proprement avec: Alt + SysRq + REISUB
Hors ligne
#3 Le 29/04/2012, à 06:53
Re : La commande grep
Bonjour,
grep -oPw "[^\s]*vu[^\s]*m" fichierHors ligne
#4 Le 29/04/2012, à 07:11
Re : La commande grep
cool Merci à vous deux! Vos deux propositions sont bonnes.
Celle de hibou7 parait clair, je l'ai bien compris. Merci ![]()
@pingouinux: Merci à toi aussi, ta proposition a aussi réussi, sauf que je ne l'ai pas bien compris. Tu peux me l' expliquer si tu peux? Et merci encore une fois ![]()
Hors ligne
#5 Le 29/04/2012, à 07:41
Re : La commande grep
grep -oPw "[^\s]*vu[^\s]*m" fichierTu peux me l' expliquer si tu peux?
\s : séparateur (espace, tabulation…)
[^\s] : un caractère autre que séparateur
[^\s]* : 0 ou un nombre quelconque de caractères autres que séparateurs
Extrait de man grep :
-P, --perl-regexp
Interpret PATTERN as a Perl regular expression. This is highly experimental and grep -P may warn of
unimplemented features.
-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 constituent
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.
-o, --only-matching
Print only the matched (non-empty) parts of a matching line, with each such part on a separate output
line.
Ajouté : La commande de hibou7 #2 affiche toutes les lignes contenant vu et se terminant par m
Dernière modification par pingouinux (Le 29/04/2012, à 07:49)
Hors ligne
#6 Le 29/04/2012, à 08:43
Re : La commande grep
re salut
merci beaucoup, j'ai compris un petit peu, même si les options P et w restent tordus à comprendre. En tout cas, la commande réussit bien sans le -oPw
J'ai testé la commande de hibou7 pour chercher les noms des fichiers avec cette manière.
ls | grep vu | 'm$' ça m'a réussi, mais quand je veux l'utiliser pour chercher des mots dans un fichier comme ça: grep vu file | grep 'm$' ça na pas réussi ! Je ne comprend pas pourquoi exactement.
Dernière modification par inoune (Le 29/04/2012, à 08:45)
Hors ligne
#7 Le 29/04/2012, à 08:48
Re : La commande grep
ls | grep un | 't$' ça m'a réussi, mais quand je veux l'utiliser pour chercher des mots dans un fichier comme ça: grep un file | 't$' ça na pas réussi ! Je ne comprend pas pourquoi exactement.
C'est parce que ls suivi d'un pipe (|) affiche les noms en colonne, donc il n'y a qu'un mot par ligne. Lorsqu'il y a plusieurs mots par ligne, ma commande du #3 devrait marcher.
Hors ligne
#8 Le 29/04/2012, à 09:00
Re : La commande grep
certainement, ta commande a fortement réussi. Mon fichier file ne comporte qu'un seul mot et qui vérifie le critère. Et pourtant, grep vu file| grep 'm$' n'affiche rien
Dernière modification par inoune (Le 29/04/2012, à 09:15)
Hors ligne
#9 Le 29/04/2012, à 09:22
Re : La commande grep
Et pourtant, grep vu file| grep 'm$' n'affiche rien
C'est que m n'est pas le dernier caractère de la ligne (espaces en fin de ligne ?), ou que le fichier est du type windows (ligne terminée par <CR><LF> au lieu de <LF>).
Que donne cette commande :
file file # Le 1er file est une commande, l'autre le nom du fichieret celle-ci (si file est petit) ?
xxd fileHors ligne
#10 Le 29/04/2012, à 14:32
Re : La commande grep
Moi à priori j'aurais fait
grep -e ".*mu.*m$" <fichier>Hors ligne
#11 Le 29/04/2012, à 15:28
Re : La commande grep
@pingouinux Ah je vois ce que vous voulez dire! Effectivement "m" n'était pas le dernier caractère dans la ligne de mon fichier!
(Juste pour te répondre à tes 2 questions: Si mon fichier s'appelle "stu" et contient cette phrase: "salut luvuhm !!"
Pour file stu, ça donne: ASCII text
Pour xxd stu, ça donne: 0000000: 7361 6c75 7420 6c75 7675 686d 2021 210a salut luvuhm !!.
@Perosurac Merci, ça a bien marché! C'est la ligne que je cherche car elle est bien compréhensible, et avec laquelle, j'ai pu résoudre d'autres trucs.
Même si cette commande a le même résultat que celle de hibou7, çàd que si "m" n'est pas le dernier caractère de la ligne, on n'affichera rien.
Je signale que ta commande a bien marché sans le -e
Merci encore une fois à toutes vos propositions. J'ai appris pas mal de choses sur ce topic ![]()
Dernière modification par inoune (Le 29/04/2012, à 15:30)
Hors ligne
Pages : 1
- Accueil
- » Forum
- » Terminal, scripts et ligne de commande
- » La commande grep
