Tôi thấy echo file|grep fil*
thất bại, nhưng echo abcd|grep abc*
thành công.
Tôi không hiểu nó, ai đó có thể giải thích?
Tôi thấy echo file|grep fil*
thất bại, nhưng echo abcd|grep abc*
thành công.
Tôi không hiểu nó, ai đó có thể giải thích?
Câu trả lời:
Có hai vấn đề với ví dụ của bạn.
Nguyên tắc cơ bản là bạn cho rằng các biểu thức chính quy hoạt động giống như các mẫu hình cầu trong đó *
là ký tự đại diện có nghĩa là "bất kỳ chuỗi ký tự nào". Thay vào đó, trong các biểu thức chính quy, *
có nghĩa là "bất kỳ số nào của nguyên tử trước", do đó, fil*
có nghĩa là f
theo i
sau là 0 hoặc nhiều l
ký tự. Bạn cần nói grep fil.*
để có được ý nghĩa dự định: .
có nghĩa là "bất kỳ ký tự đơn, vì vậy .*
có nghĩa là" bất kỳ chuỗi ký tự nào. "
Vấn đề nhỏ hơn là bạn đang sử dụng các ký tự đặc biệt không được trích dẫn có nghĩa là một cái gì đó theo quy tắc toàn cầu, có nghĩa là vỏ có thể giải thích chúng. Nếu bạn có bất kỳ tệp nào trong thư mục cục bộ khớp với các mẫu toàn cục fil*
hoặc abc*
, trình bao sẽ mở rộng chúng , do đó grep
sẽ lấy các tên tệp được mở rộng dưới dạng mẫu, không phải là RE dự định. Bất cứ khi nào bạn đang sử dụng các ký tự như vậy trên dòng lệnh, bạn nên trích dẫn chúng : echo file | grep 'fil.*'
.
echo file|grep fil*
câu trả lời vớifil
e.