2009-10-02 27 views

Trả lời

8

Nó không rõ ràng ý bạn là gì. Nếu bạn muốn có một nhân vật lúc bắt đầu và đôi chữ số cuối cùng, bạn có thể sử dụng

^[A-Za-z].*\d\d$ 

Nếu bạn chỉ muốn có một gạch nối và sau đó một đơn chữ số, sử dụng:

^[A-Za-z].*-\d$ 

Nếu bạn không quan tâm có bao nhiêu chữ số có (một hoặc nhiều), nhưng phải có một gạch nối, sử dụng:

^[A-Za-z].*-\d+$ 

Nếu không ai trong số đó là những gì bạn muốn, xin vui lòng cho biết thêm thông tin ... câu đầu tiên của câu hỏi của bạn không thực sự kiểm đếm với phần còn lại.

+0

Bạn đã quên trình định lượng cho '[A-Za-z]'. – Gumbo

+0

Hay đúng hơn, tôi quên những thứ khác sau đó - chúng tôi không biết liệu A00-10 có chấp nhận được hay không. Cố định mặc dù, cảm ơn. –

4

Ví dụ bạn

egrep -v "^(ABC)-(0|1)$" 

là câu trả lời. Đối với trường hợp thông thường, hãy xem câu trả lời của Jon

^ đánh dấu sự bắt đầu của mẫu, $ kết thúc. | nghĩa or

9

Nếu bạn đang cố gắng để phù hợp với từ sử dụng \b như delimiter từ, như thế này:

\ b [A-Za-z] - \ d + \ b

từ this reference:

\b - Trận ở vị trí betwee na từ character (bất cứ điều gì phù hợp bởi \w) và một ký tự không có từ (bất kỳ thứ gì khớp với [^\w] hoặc \W). là các ký tự từ.

+2

Trong khi bạn có thể nhận được hành vi PCRE trong một số phiên bản của grep với "grep -P", \ b là lỗi và không hoạt động đáng tin cậy; đặc biệt, nó không phát hiện tab như một ký tự ranh giới từ ('\ b/www \ n' bị hỏng trong GNU grep 2.6.3). Đã làm việc này, nó sẽ là câu trả lời gọn gàng nhất (và tôi ước nó đã làm việc!)! –

+0

Cảm ơn bạn đã cung cấp thông tin đó. –

Các vấn đề liên quan