Come posso filtrare risultati unici dall'output grep?


75

In Linux, posso grep una stringa da un file usando grep mySearchString myFile.txt. Come posso ottenere solo risultati unici?

Risposte:


125

È possibile ottenere questo risultato con sorte uniq.

esempio:

[john @ awesome ~] $ echo -e "test \ ntest \ ntest \ nanother test \ ntest"
test
test
test
un altro test
test
[john @ awesome ~] $ echo -e "test \ ntest \ ntest \ nanother test \ ntest" | ordina | uniq
un altro test
test

a seconda dei dati potresti voler utilizzare anche alcuni degli switch.


9
@John T - Consiglierei di utilizzare sortprima uniqnel caso in cui i dati non vengano ordinati. Altrimenti uniqnon funzionerà completamente.
Studer,

Adesso posso votare! Mi hai anche aiutato a scrivere altri script qui;)
Studente il

42
Usa sort -uinvece di sort | uniq. Salva un processo, riduce l'I / O totale e riduce il numero totale di confronti che devono essere effettuati.
Chris Johnsen,

@ChrisJohnsen Dovresti rendere quel commento una risposta in quanto è una soluzione migliore della risposta data in quel momento
Nico Van Belle,

1

Puoi usare:

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

-r: ricorsivo

-o: stampa solo la parte corrispondente del testo

-h: non stampare i nomi dei file

-P: regex in stile Perl (puoi usare -E invece a seconda del tuo caso)

sort -uè meglio di sort | uniq, come ha sottolineato @Chris Johnsen.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.