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?

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.


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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.