Filtrer résultat d'un grep

Résolu/Fermé
Bouboune - 30 oct. 2009 à 09:34
 Bouboune - 30 oct. 2009 à 10:08
Bonjour,
J'aurais besoin d'un petit coup de pouce!
Quand je recherche quelque chose dans un fichier texte sous linux, j'utilise cette commande :
grep "[mot clé]" [fichier texte] |grep -v "[mot clé à exclure]"

S'affiche alors toutes les occurrences correspondant à ma recherche. Cependant si une même occurrence apparait x fois dans le fichier, elle s'affiche x fois dans le résultat de ma recherche.

Ce que j'aimerais donc, c'est que ma recherche ne retourne qu'un résultat par occurrence.

Exemple 1 (résultat obtenu) :
$grep "chant" log.txt |grep -v "ent"
chantes
chantons
chant
chant
chantez
chantes

Exemple 2(résultat désiré) :
$grep "chant" log.txt |grep -v "ent" |"commande magique"
chantes
chantons
chant
chantez

Auriez-vous une idée?
Merci d'avance!
Bouboune

1 réponse

jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
30 oct. 2009 à 09:42
Salut,

Si fichier déjà trié :

grep "chant" log.txt |grep -v "ent" |uniq

ou (si pas trié) :

grep "chant" log.txt |grep -v "ent" |sort -u

;-))
1
Merci ça marche!
Par contre je n'ai pas vraiment compris l'histoire du "trié" et "non trié" :s
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895 > Bouboune
30 oct. 2009 à 10:02
La commande uniq ne peut évaluer le résultat que si le fichier de départ est trié, la comparaison se basant sur les lignes consécutives...

Un exemple pour illustrer :

 ssh$ echo -e "A\nB\nB\nC\nB\nD\nD\nD\nA\nC"
A
B
B
C
B
D
D
D
A
C

 ssh$ echo -e "A\nB\nB\nC\nB\nD\nD\nD\nA\nC" | uniq
A
B
C
B
D
A
C

 ssh$ echo -e "A\nB\nB\nC\nB\nD\nD\nD\nA\nC" | sort -u
A
B
C
D

 ssh$ echo -e "A\nB\nB\nC\nB\nD\nD\nD\nA\nC" | sort | uniq
A
B
C
D

 ssh$

;-))
0
Bouboune > jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020
30 oct. 2009 à 10:08
ok! j'ai ma réponse!

Merci beaucoup pour cette réactivité!
0