Regex cho tiếng Hy Lạp hoặc nhiều từ trong grep


12
[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:


21

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

Tôi thấy điều đó trong trang đàn ông và hiểu lầm. Tôi nghĩ rằng nó có nghĩa là \ | sẽ làm cho nó tìm biểu thức hoàn chỉnh "foo | bar" trái ngược với các biểu thức riêng lẻ. Cảm ơn đã phản ứng nhanh chóng!
Ocasta Eshu

4
Bạn cũng có thể sử dụng egrep(một bí danh cho grep -E) thay vì grep.
speakr
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.