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?

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.


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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.