Ich würde dies ignorieren grep
. Es ist gut für reguläre Ausdrücke, aber es sieht nicht so aus, als ob Sie das hier wirklich brauchen. comm
kann zwei Dateien vergleichen und Ihnen Schnittpunkte anzeigen. Verwenden Sie Ihre genauen Beispiele:
$ comm -12 list.txt output.txt
a.1
b.1
etc
Dies ist schneller als jeder Grep, hängt jedoch (stark) von den zu sortierenden Dateien ab. Wenn dies nicht der Fall ist, können Sie sie vorsortieren, dies ändert jedoch die Ausgabe, sodass sie auch sortiert wird.
comm -12 <(sort list.txt) <(sort output.txt)
Alternativ diese Antwort von iiSeymour lassen Sie tun es mit grep
. Die Flags fordern eine Eingabedatei an und erzwingen eine Suche mit festen Zeichenfolgen und vollständigen Wörtern. Dies hängt nicht von der Bestellung ab, sondern basiert auf der output.txt
Bestellung. Kehren Sie die Dateien um, wenn Sie sie in der Reihenfolge list.txt haben möchten.
$ grep -wFf list.txt output.txt
a.1
b.1
etc
Wenn Ihr list.txt
ist wirklich groß, können Sie diese ein wenig mehr iterativ angehen müssen und jede Zeile passieren separat grep. Dies wird die Verarbeitungszeit massiv verlängern. Oben würden Sie einmal lesen output.txt
, aber auf diese Weise würden Sie es für jede list.txt-Zeile lesen und verarbeiten. Es ist schrecklich ... Aber es könnte Ihre einzige Wahl sein. Auf der anderen Seite sortiert es dann die Dinge nach der list.txt
Reihenfolge.
$ while read line; do grep -wF "$line" output.txt; done < list.txt
a.1
b.1
etc