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 -H
vào mỗi grep
lời gọi. Hoặc, nếu bạn grep
khô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