Jeśli wszystko jest w jednym katalogu, możesz:
for file in *fileprefix*; do
grep 'search string' "$file" | tail -1
done
Jeśli są to duże pliki, warto przyspieszyć, tac
drukując plik w odwrotnej kolejności (ostatni wiersz), a następnie grep -m1
dopasowując do pierwszego wystąpienia. W ten sposób unikniesz konieczności czytania całego pliku:
for file in *fileprefix*; do
tac file | grep -m1 'search string'
done
Oba zakładają, że nie ma pasujących katalogów fileprefix
. Jeśli tak, pojawi się błąd, który możesz po prostu zignorować. Jeśli to jest problem, sprawdź tylko pliki:
for file in *fileprefix*; do
[ -f "$file" ] && tac file | grep -m1 'search string'
done
Jeśli potrzebujesz także wydrukować nazwę pliku, dodaj -H
do każdego grep
wywołania. Lub, jeśli grep
nie obsługuje tego, powiedz mu, aby przeszukać /dev/null
. To nie zmieni danych wyjściowych, ale ponieważ grep
podano wiele plików, zawsze będzie drukować nazwę pliku dla każdego trafienia:
for file in *fileprefix*; do
grep 'search string' "$file" /dev/null | tail -1
done