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 05/07/2012, à 16:21

Le Goss

Bash grep : occurences à partir d'expressions multiples

Bonjour à tous,

Je me suis fait ce petit script qui permet de trouver les occurrences d'un fichier en entrant au maximum 3 expressions.

#!/bin/bash
echo -e ""
read -p "nombres d'expressions : " nombre
echo -e ""
if [ "$nombre" = "1" ]
then
read -p "Entrez l'expression ---------> " m1
echo -e "\n\nLes occurrences sont : \n\n"
grep -i "$m1" fichier.txt
elif [ "$nombre" = "2" ]
then
read -p "Entrez l'expression 1 ---------> " m1
read -p "Entrez l'expression 2 ---------> " m2
echo -e "\n\nLes occurrences sont : \n\n"
grep -i "$m1" fichier.txt | grep "$m2"
elif [ "$nombre" = "3" ]
then
read -p "Entrez l'expression 1 ---------> " m1
read -p "Entrez l'expression 2 ---------> " m2
read -p "Entrez l'expression 3 ---------> " m3
echo -e "\n\nLes occurrences sont : \n\n"
grep -i "$m1" fichier.txt | grep "$m2" fichier.txt | grep "$m3"
fi
echo -e ""

Ça fonctionne mais je ne suis pas satisfait.
Je me doute que ça serait mieux et plus souple avec une structures For... mais à défaut de mon PC, c'est moi qui plante.

Merci pour votre aide,
Cordialement


Si je pose une question sur le forum, ce n'est pas par paresse ou pour faire faire "mes devoirs"; c'est par ignorance: j'ai 51 berges. Et, par principe, je préfère être traité d'ignare que de fainéant.
Samsung i7-3630QM CPU @ 2.40GHz × 8 - 64 bits - RAM 7,7 Gio - DD 976 Go - Bodhi 6.0.0 Ubuntu 20.04
Allergique au wysiwyg; traitement à vie: Lilypond - LaTeX - txt2tags

Hors ligne

#2 Le 05/07/2012, à 16:27

Hizoka

Re : Bash grep : occurences à partir d'expressions multiples

oula... compliqué ton truc...

un simple :

cat test
popo
pupu
pipi
cucu
caca

egrep "caca|pipi|popo" test
caca
pipi
popo

ou

grep "caca\|pipi\|popo" test

PS : tu t'es planté pour 3 indices

grep -i "$m1" fichier.txt | grep "$m2" fichier.txt | grep "$m3"

=>

grep -i "$m1" fichier.txt | grep "$m2" | grep "$m3"

Dernière modification par Hizoka (Le 05/07/2012, à 16:31)


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

En ligne

#3 Le 05/07/2012, à 16:37

Le Goss

Re : Bash grep : occurences à partir d'expressions multiples

Merci pour ta réponse.
Peut-être préciser ce que je ferai de ce script...
Je souhaite l'envoyer à quelqu'un qui ne connaît rien au Bash.
Je cherche à obtenir une petite interface console pour que le bonhomme se laisse conduire dans sa recherche. Il lance le script et répond simplement aux question posées :
Combien d'expressions voulez-vous trouver ?... et le gars entre sa réponse.
S'il met "2", la console lui demande automatiquement et successivement de les rentrer... comme mis dans mon premier post.


Si je pose une question sur le forum, ce n'est pas par paresse ou pour faire faire "mes devoirs"; c'est par ignorance: j'ai 51 berges. Et, par principe, je préfère être traité d'ignare que de fainéant.
Samsung i7-3630QM CPU @ 2.40GHz × 8 - 64 bits - RAM 7,7 Gio - DD 976 Go - Bodhi 6.0.0 Ubuntu 20.04
Allergique au wysiwyg; traitement à vie: Lilypond - LaTeX - txt2tags

Hors ligne

#4 Le 05/07/2012, à 16:43

Hizoka

Re : Bash grep : occurences à partir d'expressions multiples

oui mais c'est franchement pas interressant...

il doit lancer ton script (il faut deja qu'il sache le faire), repondre aux questions...

s'il apprend juste la commande :

egrep "mot 1|mot 2..." FICHIER

ca sera bien plus rapide....

Sinon tu peux remplacer tes IF par un CASE

IF
then
elif
then
...
fi

=>

case "$nombre" in
 1) .... ;;
 2) ... ;;
 3) .... ;;
esac

KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

En ligne

#5 Le 05/07/2012, à 17:16

pingouinux

Re : Bash grep : occurences à partir d'expressions multiples

Bonjour,
Quelques remarques :

Hizoka #4 a écrit :

egrep "mot 1|mot 2..." FICHIER

Ta commande va sortir les lignes qui contiennent mot 1 ou mot 2
tandis que

grep -i "$m1" fichier.txt | grep "$m2" | grep "$m3"

sortira celles qui contiennent $m1 et $m2 et $m3
Si on veut ignorer la casse pour les 3 mots, ce serait

grep -i "$m1" fichier.txt | grep -i "$m2" | grep -i "$m3"

Hors ligne

#6 Le 05/07/2012, à 18:18

nesthib

Re : Bash grep : occurences à partir d'expressions multiples

pour la lecture des arguments :

read -p "Entrez jusqu'à trois mots " arg1 arg2 arg3 other

un exemple (avec une démo fun de syntaxe bash) :

#!/bin/bash
read -p "Entrez jusqu'à trois mots " mot mot_suppl1 mot_suppl2 other
for arg in ${!mot_suppl*}
do
  mot+="|${!arg}"
  unset $arg
done

grep -i "${mot}" fichier

GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#7 Le 05/07/2012, à 22:08

Hizoka

Re : Bash grep : occurences à partir d'expressions multiples

pingouinux => bien vu !

sinon il faut faire :

egrep ".*mot1.*mot2.*mot3.*"

mais ca sera exclusivement dans cet ordre...

Dernière modification par Hizoka (Le 05/07/2012, à 22:08)


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

En ligne