Comment puis-je filtrer les résultats uniques de la sortie de grep?

75

Sous Linux, je peux grep une chaîne d'un fichier en utilisant grep mySearchString myFile.txt. Comment puis-je obtenir uniquement le résultat qui est unique?

hap497
la source

Réponses:

125

Vous pouvez y parvenir avec les utilitaires sortet uniq.

exemple:

[john @ awesome ~] $ echo -e "test \ ntest \ ntest \ nanother test \ ntest"
tester
tester
tester
un autre test
tester
[john @ awesome ~] $ echo -e "test \ ntest \ ntest \ nanother test \ ntest" | trier | uniq
un autre test
tester

En fonction des données, vous pouvez également utiliser certains des commutateurs.

John T
la source
9
@John T - Je recommanderais d'utiliser sortavant uniqsi les données ne sont pas commandées. Sinon uniq, ça ne marchera pas complètement.
Studer le
t maintenant je peux upvote! Vous m'avez également aidé à écrire d'autres scripts ici;)
Studer
42
Utilisez sort -uau lieu de sort | uniq. Il enregistre un processus, réduit le nombre total d'E / S et le nombre total de comparaisons à effectuer.
Chris Johnsen
@ChrisJohnsen Vous devriez faire de ce commentaire une réponse, car c'est une meilleure solution que la réponse actuelle
Nico Van Belle
1

Vous pouvez utiliser:

grep -rohP "(mySearchString)" . | sort -u

-r: récursif

-o: n'imprime qu'une partie du texte correspondant

-h: ne pas imprimer les noms de fichiers

-P: regex de style Perl (vous pouvez utiliser -E à la place selon votre cas)

sort -uest mieux que sort | uniq, comme l'a souligné @Chris Johnsen.

Pato
la source