Tôi đã trả lời câu hỏi này trên SuperUser , một cái gì đó liên quan đến loại biểu thức chính quy được sử dụng trong khi lấy một đầu ra.
Câu trả lời tôi đưa ra là:
tail -f log | grep "some_string.*some_string"
Và sau đó, trong ba bình luận cho câu trả lời của tôi @Bob đã viết điều này:
.*
là tham lam và có thể nắm bắt nhiều hơn bạn muốn..*?
thường là tốt hơn.
Thì đây,
những
?
là một modifier trên*
, làm cho nó lười biếng thay vì mặc định tham lam. Giả sử PCRE.
Tôi googled cho PCRE
, nhưng không thể hiểu ý nghĩa của điều này trong câu trả lời của tôi là gì?
và cuối cùng là
Tôi cũng nên chỉ ra rằng đây là regex (grep thực hiện regex POSIX theo mặc định), không phải là shell toàn cầu.
Tôi chỉ biết Regex là gì và sử dụng nó rất cơ bản trong lệnh grep. Vì vậy, tôi không thể nhận được bất kỳ ý kiến nào trong số 3 ý kiến đó và tôi có những câu hỏi sau:
- Sự khác biệt trong việc sử dụng
.*?
so với là.*
gì? - Cái nào tốt hơn và trong hoàn cảnh nào? Vui lòng cung cấp các ví dụ.
Ngoài ra sẽ rất hữu ích để hiểu các ý kiến, Nếu bất cứ ai có thể
CẬP NHẬT: Như một câu trả lời cho câu hỏi Regex khác với Shell Globs như thế nào? @Kusalananda cung cấp liên kết này trong bình luận của mình.
LƯU Ý: Nếu cần, Vui lòng đọc câu trả lời của tôi cho câu hỏi này trước khi trả lời để tham khảo ngữ cảnh.
.*
so với .*?
. Câu hỏi "sự khác biệt giữa biểu thức chính quy và câu hỏi vỏ" đã được giải quyết trên trang web này.