2012-10-01 29 views
7

Tôi cần tìm và hiển thị các dòng trong vỏ bằng cách sử dụng egrep bắt đầu bằng r và kết thúc bằng g.dòng egrep bắt đầu bằng r và kết thúc bằng g

Tôi đã

egrep -e "^r*g$" testfile.txt 

nhưng nó không phải là cho tôi bất kỳ kết quả, những gì tôi làm sai?

+4

thay đổi "^ r * g $" để "^ r * g $." – iruvar

+0

Mặc dù bạn có thể đặt một '$ 'ở phần cuối của một chuỗi trích dẫn đôi , nó sẽ tốt hơn nhiều để viết rằng với dấu ngoặc kép duy nhất: ''^ r. * g $'' –

+0

Bạn đang bối rối biểu thức thông thường với các mẫu phù hợp với tập tin ("globbing") được sử dụng bởi trình bao. Trong regexp, '.' khớp với một ký tự đơn và'. * 'Khớp với số không hoặc nhiều ký tự; trong một mẫu phù hợp với tệp, đó là '?' và '*' và '.' không phải là đặc biệt. Các mẫu khớp tệp ít mạnh mẽ hơn nhưng có xu hướng thuận tiện hơn cho mục đích giới hạn của việc chọn tệp. –

Trả lời

10

thêm một . nên làm việc

egrep -e "^r.*g$" 

Nó về cơ bản có nghĩa là: tất cả những gì bắt đầu với một r, sau đó được theo sau bởi không hay nhiều bất cứ điều gì, và sau đó kết thúc với g.

thử nghiệm chống lại

r fsgdfs gfsdg 
fooo bar 
rfoo g 
fdsqfdsq 

rg 

nó trả

r fsgdfs gfsdg 
rfoo g 
rg 
0

Các * được phù hợp trên r, không phải "bất cứ điều gì Inbetween". Cập nhật nó để .* và bạn sẽ thấy kết quả:

egrep -e "^r.*g$" testfile.txt 
Các vấn đề liên quan