it-swarm.com.de

Wie kann ich verhindern, dass grep dieselbe Zeichenfolge mehrmals druckt?

Wenn ich eine Datei mit folgendem Inhalt grep:

These are words
These are words
These are words
These are words

... für das Wort These wird die Zeichenfolge These are words viermal gedruckt.

Wie kann ich verhindern, dass grep wiederkehrende Zeichenfolgen mehr als einmal ausgibt? Ansonsten, wie kann ich die Ausgabe von grep manipulieren, um doppelte Zeilen zu entfernen?

12
Trae

Die Unix-Philosophie ist es, Werkzeuge zu haben, die eines können und die es auch können. In diesem Fall ist grep das Tool, das Text aus einer Datei auswählt. Um festzustellen, ob Duplikate vorhanden sind, sortiert man den Text. Um die Duplikate zu entfernen, verwendet man die Option -u, um sort. Somit:

grep These filename | sort -u

sort hat viele Optionen: siehe man sort. Wenn Sie Duplikate zählen möchten oder ein komplizierteres Schema zum Ermitteln von Duplikaten haben möchten, leiten Sie die Sortierausgabe an uniq: grep These filename | sort | uniq weiter, und unter manuniq` finden Sie Optionen.

19
John1024

Verwenden Sie grep und einen zusätzlichen Schalter, wenn Sie nur nach einer einzelnen Zeichenfolge suchen

grep -m1 'These' filename

Aus man grep

-m NUM, --max-count=NUM
        Stop reading a file after NUM matching lines.  If the input is
        standard input from a regular file, and NUM matching lines are
        output, grep ensures that the standard input is positioned  to
        just  after  the  last matching  line  before exiting, regardless
        of the presence of trailing context lines.  This enables a calling
        process to resume a search.  When grep stops after NUM matching
        lines, it outputs any trailing context lines.  When the -c or
        --count option is also used, grep does not output a count greater
        than NUM.  When the -v or --invert-match option is also used, grep
        stops after outputting NUM non-matching lines.

oder mit awk;)

awk '/These/ {print; exit}' foo
1
A.B.