Jak mogę odfiltrować unikalne wyniki z wyjścia grep?

75

W Linuksie mogę grepować ciąg z pliku za pomocą grep mySearchString myFile.txt. Jak mogę uzyskać tylko wyjątkowy wynik?

hap497
źródło

Odpowiedzi:

125

Możesz to osiągnąć za pomocą narzędzi sorti uniq.

przykład:

[John @ awesome ~] $ echo -e "test \ ntest \ ntest \ nanother test \ ntest"
test
test
test
kolejny test
test
[John @ awesome ~] $ echo -e "test \ ntest \ ntest \ nanother test \ ntest" | sortuj | uniq
kolejny test
test

w zależności od danych możesz również użyć niektórych przełączników.

John T.
źródło
9
@John T - Polecam użyć sortwcześniej uniqw przypadku, gdy dane nie zostaną zamówione. W przeciwnym razie uniqnie zadziała całkowicie.
Studer
Teraz mogę głosować! Pomogłeś mi również tutaj napisać inne skrypty;)
Studer
42
Użyj sort -uzamiast sort | uniq. Oszczędza to proces, zmniejsza całkowitą liczbę operacji we / wy i zmniejsza całkowitą liczbę porównań, które należy wykonać.
Chris Johnsen
@ChrisJohnsen Powinieneś zrobić z tego komentarza odpowiedź, ponieważ jest to lepsze rozwiązanie niż obecnie udzielona odpowiedź
Nico Van Belle
1

Możesz użyć:

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

-r: rekurencyjny

-o: drukuj tylko pasującą część tekstu

-h: nie drukuj nazw plików

-P: Wyrażenia regularne w stylu Perla (zamiast tego można użyć opcji -E, w zależności od przypadku)

sort -ujest lepsze niż sort | uniq, jak zauważył @Chris Johnsen.

Pato
źródło