Nếu bạn chỉ cần kiểm tra xem có tìm thấy kết quả khớp hay không, hãy cắt tất cả các dòng đầu vào theo độ dài của tiền tố mong muốn ($1
) và sau đó sử dụng grep mẫu cố định:
if cut -c 1-"${#1}" | grep -qF "$1"; then
echo "found"
else
echo "not found"
fi
Cũng dễ dàng để có được số lượng các dòng phù hợp:
cut -c 1-"${#1}" | grep -cF "$1"
Hoặc số dòng của tất cả các dòng khớp (số dòng bắt đầu bằng 1):
cut -c 1-"${#1}" | grep -nF "$1" | cut -d : -f 1
Bạn có thể cung cấp số dòng cho head
và tail
để có được toàn bộ văn bản của các dòng phù hợp, nhưng tại thời điểm đó, việc tiếp cận với một ngôn ngữ kịch bản hiện đại như Python hoặc Ruby sẽ dễ dàng hơn.
(Các ví dụ trên giả định Posix grep và cắt. Họ giả sử tệp để tìm kiếm xuất phát từ đầu vào tiêu chuẩn, nhưng có thể dễ dàng điều chỉnh để lấy tên tệp thay thế.)
Chỉnh sửa: Bạn cũng nên đảm bảo rằng mẫu ( $1
) không phải là chuỗi có độ dài bằng không. Nếu không thì cut
nói values may not include zero
. Ngoài ra, nếu sử dụng Bash, hãy sử dụng set -o pipefail
để bắt lỗi thoát cut
.
grep '^$1'
? Hoặc bạn không có nghĩa là bạn muốn ngăn chặn sự$1
mở rộng của vỏ?