Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 28/04/2012, à 22:45

inoune

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

hibou7

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)


Xubuntu 22.04 sur HP ENVY TS Sleekbook 4 | CPU: Intel Core i5-3337U  | RAM: 8 Gio
Débuter en Console
Si GNU/Linux ne répond plus, le redémarrer proprement avec la combinaison de touches:
Alt + SysRq + REISUB (Retourne en Islande sur un bateau).

Hors ligne

#3 Le 29/04/2012, à 06:53

pingouinux

Re : La commande grep

Bonjour,

grep -oPw "[^\s]*vu[^\s]*m" fichier

Hors ligne

#4 Le 29/04/2012, à 07:11

inoune

Re : La commande grep

cool Merci à vous deux! Vos deux propositions sont bonnes.
Celle de hibou7 parait clair, je l'ai bien compris. Merci wink
@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 wink

Hors ligne

#5 Le 29/04/2012, à 07:41

pingouinux

Re : La commande grep

grep -oPw "[^\s]*vu[^\s]*m" fichier
inoune #4 a écrit :

Tu 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

inoune

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

pingouinux

Re : La commande grep

inoune #6 a écrit :

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

inoune

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

pingouinux

Re : La commande grep

inoune #8 a écrit :

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 fichier

et celle-ci (si file est petit) ?

xxd file

Hors ligne

#10 Le 29/04/2012, à 14:32

Perosurac

Re : La commande grep

Moi à priori j'aurais fait

grep -e ".*mu.*m$" <fichier>

Hors ligne

#11 Le 29/04/2012, à 15:28

inoune

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 wink

Dernière modification par inoune (Le 29/04/2012, à 15:30)

Hors ligne