[Computer]$ grep "foo|bar" filename
Tôi hiểu lệnh trên sẽ trả về mỗi dòng trong tên tệp khi thoát "foo" hoặc "bar". Các trang người đàn ông xác nhận | như Regex hoặc ký hiệu và mã hoạt động độc lập cho "foo" và "bar". Tôi đang thiếu gì?
[Computer]$ grep "foo|bar" filename
Tôi hiểu lệnh trên sẽ trả về mỗi dòng trong tên tệp khi thoát "foo" hoặc "bar". Các trang người đàn ông xác nhận | như Regex hoặc ký hiệu và mã hoạt động độc lập cho "foo" và "bar". Tôi đang thiếu gì?
Câu trả lời:
grep sử dụng các biểu thức chính quy cơ bản (BRE) theo mặc định. Từ trang người đàn ông:
Biểu thức cơ bản so với biểu thức chính quy mở rộng: Trong các biểu thức chính quy cơ bản, các ký tự meta ?, +, {, |, (Và) mất ý nghĩa đặc biệt của chúng; thay vào đó, hãy sử dụng các phiên bản gạch chéo ngược \?, +, {, \ |, (, và).
Vì vậy, bạn hoặc phải thoát khỏi |
:
grep "foo\|bar" filename
hoặc bật biểu thức chính quy mở rộng:
grep -E "foo|bar" filename
egrep
(một bí danh cho grep -E
) thay vì grep
.