Wenn sich alles in einem einzigen Verzeichnis befindet, können Sie Folgendes tun:
for file in *fileprefix*; do
grep 'search string' "$file" | tail -1
done
Wenn es sich um große Dateien handelt, kann es sinnvoll sein, die Daten zu beschleunigen, indem Sie tac
die Datei in umgekehrter Reihenfolge drucken (letzte Zeile zuerst) und dann grep -m1
mit dem ersten Vorkommen übereinstimmen. Auf diese Weise müssen Sie nicht die gesamte Datei lesen:
for file in *fileprefix*; do
tac file | grep -m1 'search string'
done
Beide gehen davon aus, dass keine übereinstimmenden Verzeichnisse vorhanden sind fileprefix
. Wenn dies der Fall ist, wird ein Fehler angezeigt, den Sie einfach ignorieren können. Wenn dies ein Problem ist, suchen Sie nur nach Dateien:
for file in *fileprefix*; do
[ -f "$file" ] && tac file | grep -m1 'search string'
done
Wenn Sie auch den Dateinamen drucken möchten, fügen Sie ihn -H
jedem grep
Aufruf hinzu. Oder, wenn Sie grep
es nicht unterstützen, sagen Sie ihm, dass er auch durchsuchen soll /dev/null
. Das ändert nichts an der Ausgabe, aber da grep
mehrere Dateien angegeben sind, wird immer der Dateiname für jeden Treffer gedruckt:
for file in *fileprefix*; do
grep 'search string' "$file" /dev/null | tail -1
done