Dấu hoa thị chỉ là một toán tử lặp lại , nhưng bạn cần cho nó biết những gì bạn lặp lại. /*abc*/
khớp với một chuỗi có chứa ab và không hoặc nhiều hơn c (vì * thứ hai nằm trên c; chuỗi đầu tiên là vô nghĩa vì không có gì để lặp lại). Nếu bạn muốn khớp với bất kỳ thứ gì, bạn cần phải nói .*
- dấu chấm có nghĩa là bất kỳ ký tự nào ( trong một số nguyên tắc nhất định ). Nếu bạn muốn chỉ khớp với abc, bạn có thể nói grep 'abc' myFile
. Đối với kết hợp phức tạp hơn, bạn cần sử dụng .*
- grep 'abc.*def' myFile
sẽ so khớp một chuỗi chứa abc theo sau là def với một cái gì đó tùy chọn ở giữa.
Cập nhật dựa trên nhận xét:
*
trong một biểu thức chính quy không hoàn toàn giống với * trong bảng điều khiển. Trong bảng điều khiển, * là một phần của cấu trúc hình cầu và chỉ hoạt động như một ký tự đại diện (ví dụ: ls *.log
sẽ liệt kê tất cả các tệp kết thúc bằng .log). Tuy nhiên, trong biểu thức chính quy, * là một bổ ngữ, có nghĩa là nó chỉ áp dụng cho ký tự hoặc nhóm đứng trước nó. Nếu bạn muốn * trong biểu thức chính quy hoạt động như một ký tự đại diện, bạn cần sử dụng .*
như đã đề cập trước đó - dấu chấm là một ký tự đại diện và dấu sao, khi sửa đổi dấu chấm, có nghĩa là tìm một hoặc nhiều dấu chấm; I E. tìm một hoặc nhiều ký tự bất kỳ.