Sử dụng Công cụ sửa đổi của Regex tương thích Perl (PCRE) trong grep


7

Theo grep --helpman grep, chúng ta có thể sử dụng -Ptùy chọn để diễn giải mẫu dưới dạng biểu thức chính quy Perl (PCRE, chính xác), thay vì biểu thức chính quy cơ bản POSIX (BRE) mặc định .

Trong ngôn ngữ Perl, nhiều Công cụ sửa đổi khác nhau có thể được thêm vào biểu thức, để điều chỉnh diễn giải mẫu (theo cú pháp của /pattern/modifiers).

Vậy, làm thế nào ai đó có thể thêm công cụ sửa đổi vào biểu thức chính quy Perl của grep? Tôi đã thử một số biến thể như grep -P "/^got.it$/ms" [FILE]nhưng kết quả tìm kiếm đã sai.

Tuy nhiên, về cách giải thích của PCRE, hướng dẫn chỉ ra rằng:

Điều này mang tính thử nghiệm cao và grep -P có thể cảnh báo các tính năng chưa được thực hiện.

Có thể là công cụ grep hoàn toàn không hỗ trợ sửa đổi ?

Nhân tiện, tôi nhận thấy rằng người ta có thể thực hiện khớp mẫu không phân biệt chữ hoa chữ thường bằng cách sử dụng -itùy chọn, đây là một ví dụ về công cụ sửa đổi.


Crossposted : askubfox.com/questions/410565/ khăn ... không sao, nhưng bạn nên chỉ ra điều này!
goldilocks

Đáng lưu ý rằng các biểu thức tương thích PRCE không có sẵn trong tất cả các phiên bản grep: POSIX non-gnu mặc định OpenBSD không hỗ trợ những điều này ngay lập tức nhưng GNU grep có thể được cài đặt nếu bạn cần sử dụng -Ptính năng PCRE .
Đánh dấu

Câu trả lời:


8

PCRE không phải là perl theo nghĩa đen; họ sử dụng thư viện C độc lập, libpcre. Đôi khi "phong cách PCRE" cũng được sử dụng để tham khảo, ví dụ, các ngôn ngữ khác mà thực hiện regexps sử dụng các mô hình tương tự / tương tự, mặc dù họ không dựa vào libpcre (lưu ý grep không sử dụng libpcre thực tế).

Nói đúng ra, một biểu thức chính quy không thực sự bao gồm các từ bổ nghĩa, 1 nó chỉ là một mẫu. Một số giao diện regrec (như perl's) cho phép sử dụng các công cụ sửa đổi cùng với các mẫu; grepkhông.

một vài sự khác biệt về ngữ nghĩa mẫu. Một lần nữa, hãy nhớ rằng nó không thực sự perl, đó là một cái gì đó dựa trên nó.


1. Trừ khi họ thực sự bên trong mô hình , mà bạn có thể làm với grep. Ví dụ grep -P "(?i)foobar"sẽ là một trường hợp không nhạy cảm.

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.