Trong một kịch bản bash, tôi có một danh sách các dòng trong một tập tin tôi muốn grep và sau đó hiển thị trên tiêu chuẩn ra, đó là dễ dàng nhất thực hiện với một thời gian đọc:grep, thông điệp in khác không có trận đấu
grep "regex" "filepath" | while read line; do
printf "$line\n"
done
Tuy nhiên, tôi muốn thông báo cho người dùng nếu không có dòng nào được khớp với grep. Tôi biết rằng người ta có thể làm điều này bằng cách updating a variable inside the loop nhưng có vẻ như một cách tiếp cận thanh lịch hơn nhiều (nếu có thể) sẽ cố gắng đọc một dòng trong vòng lặp cho đến khi không có đầu ra, một thông báo lỗi có thể được hiển thị.
Đây là nỗ lực đầu tiên của tôi:
grep "regex" "filepath" | until [[ -z ${read line} ]]; do
if [[ -z $input ]]; then
printf "No matches found\n"
break
fi
printf "$line\n"
done
Nhưng trong trường hợp này các lệnh đọc bị thay đổi, và tôi đã không chắc chắn về một cách khác các cụm từ truy vấn. Cách tiếp cận này có thể, và nếu không, liệu có một giải pháp phù hợp hơn cho vấn đề này?
Trong ví dụ đầu tiên của bạn, chỉ cần có grep và bạn sẽ có được hành vi tương tự. Đây có phải chỉ là một ví dụ hay là những gì bạn thực sự muốn làm? – jordanm
Có phải không? Bạn có thể chứng minh như thế nào? Tôi vẫn còn khá mới để bash và không hiểu làm thế nào để sử dụng grep để có được hành vi đó. Mã tôi đã viết cho thấy kết quả cuối cùng tôi đang cố gắng đạt được, để trả lời câu hỏi của bạn. Ah mèo là thừa. Đã xóa, cảm ơn bạn. – seraththundhuil
grep in các dòng phù hợp với đầu ra tiêu chuẩn của nó theo mặc định, đó là lý do tại sao vòng lặp while/read hoạt động, nó đang đọc đầu vào tiêu chuẩn. Chỉ cần chạy 'grep 'regex" "filepath" 'và bạn sẽ thấy các dòng khớp của bạn. –