Wie kann ich eindeutige Ergebnisse aus der grep-Ausgabe herausfiltern?

75

Unter Linux kann ich mit eine Zeichenfolge aus einer Datei abrufen grep mySearchString myFile.txt. Wie kann ich nur das Ergebnis erhalten, das einzigartig ist?

hap497
quelle

Antworten:

125

Sie können dies mit den Hilfsprogrammen sortund erreichen uniq.

Beispiel:

[john @ awesome ~] $ echo -e "test \ ntest \ ntest \ nanother test \ ntest"
Prüfung
Prüfung
Prüfung
ein weiterer Test
Prüfung
[john @ awesome ~] $ echo -e "test \ ntest \ ntest \ nanother test \ ntest" | sortieren | uniq
ein weiterer Test
Prüfung

Abhängig von den Daten möchten Sie möglicherweise auch einige der Schalter verwenden.

John T
quelle
9
@ John T - Ich würde empfehlen, sortvor uniqzu verwenden, falls die Daten nicht bestellt werden. Sonst uniqklappt das nicht ganz.
Studer
t jetzt kann ich upvote! Du hast mir auch geholfen, andere Skripte hier zu schreiben;)
Studer
42
Verwenden Sie sort -uanstelle von sort | uniq. Es spart einen Prozess, reduziert die gesamten E / A-Vorgänge und reduziert die Gesamtzahl der durchzuführenden Vergleiche.
Chris Johnsen
@ ChrisJohnsen Sie sollten diesen Kommentar zu einer Antwort machen, da es eine bessere Lösung ist als die aktuell angegebene Antwort
Nico Van Belle
1

Sie können verwenden:

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

-r: rekursiv

-o: druckt nur den passenden Teil des Textes

-h: keine Dateinamen ausgeben

-P: Regex im Perl-Stil (Sie können stattdessen -E verwenden, je nach Fall)

sort -uist besser als sort | uniq, wie @Chris Johnsen betonte.

Pato
quelle