Nếu mọi thứ đều nằm trong một thư mục, bạn có thể làm:
for file in *fileprefix*; do
grep 'search string' "$file" | tail -1
done
Nếu đây là các tệp lớn, có thể đáng để tăng tốc mọi thứ bằng cách sử dụng tacđể in tệp theo thứ tự ngược lại (dòng cuối cùng trước) và sau đó grep -m1để khớp với lần xuất hiện đầu tiên. Bằng cách đó, bạn tránh phải đọc toàn bộ tệp:
for file in *fileprefix*; do
tac file | grep -m1 'search string'
done
Cả hai đều cho rằng không có thư mục phù hợp fileprefix. Nếu có, bạn sẽ gặp một lỗi mà bạn có thể bỏ qua. Nếu đó là một vấn đề, chỉ kiểm tra các tệp:
for file in *fileprefix*; do
[ -f "$file" ] && tac file | grep -m1 'search string'
done
Nếu bạn cũng cần tên tệp được in, thêm -Hvào mỗi greplời gọi. Hoặc, nếu bạn grepkhông hỗ trợ nó, hãy bảo nó cũng tìm kiếm thông qua /dev/null. Điều đó sẽ không thay đổi đầu ra nhưng vì grepđược cung cấp nhiều tệp, nó sẽ luôn in tên tệp cho mỗi lần nhấn:
for file in *fileprefix*; do
grep 'search string' "$file" /dev/null | tail -1
done