#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 :
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 : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde 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