2012-04-27 34 views
92

tôi đang cố gắng để tìm kiếm một chuỗi 0.49 (với dấu chấm) bằng cách sử dụng lệnhSử dụng grep để tìm kiếm một chuỗi mà có một dấu chấm trong nó

grep -r "0.49" * 

Nhưng những gì xảy ra là tôi cũng đang nhận được kết quả không mong muốn có chứa chuỗi như 0449, 0949 v.v. Điều là linux xem xét dấu chấm (.) Như bất kỳ nhân vật và đưa ra tất cả các kết quả. Nhưng tôi muốn nhận được kết quả chỉ cho "0,49".

+1

lời nhắc thân thiện: bạn quên chấp nhận câu trả lời;) –

Trả lời

117

grep sử dụng các regex; . có nghĩa là "bất kỳ ký tự" nào trong regex. Nếu bạn muốn một chuỗi chữ, hãy sử dụng grep -F, fgrep hoặc thoát khỏi . đến \..

+3

Điều này cũng hoạt động trong 'git grep'. – mwfearnley

+29

Tôi cần phải thoát hai lần như vậy '\\. 'Để nó hoạt động. Tôi đang sử dụng zsh. –

+3

@NikosRenieris bạn đã quấn chuỗi grepping của bạn với dấu ngoặc kép? –

26

grep -F -r '0.49' * coi 0,49 là chuỗi "cố định" thay vì cụm từ thông dụng. Điều này làm cho . mất đi ý nghĩa đặc biệt của nó.

4

Bạn có thể thoát khỏi dấu chấm và các ký tự đặc biệt khác bằng cách sử dụng \

ví dụ: grep -r "0 \ .49"

+1

wow mọi người nhanh chóng vẽ trên nguồn cấp dữ liệu chính! 6 câu trả lời trong vòng một phút! :) –

+0

ha ha! rất đúng. Câu hỏi dễ dàng nhiều phản ứng! :) – tuxuday

17

Bạn cần phải thoát khỏi . làm "0\.49".

A . là ký tự meta regex phù hợp với bất kỳ ký tự nào (ngoại trừ dòng mới). Để khớp với một khoảng thời gian, bạn cần phải thoát khỏi nó.

3

Dấu chấm thoát. Lệnh mẫu sẽ là.

grep '0\.00' 
+1

Cảm ơn tất cả các bạn đã trả lời nhanh chóng. Câu trả lời của bạn hữu ích. :) –

5

Chỉ cần thoát khỏi .

grep -r "0\.49"

1

Bạn cũng có thể sử dụng "[.]"

grep -r "0[.]49" 
1

Có rất nhiều câu trả lời ở đây gợi ý để thoát khỏi dấu chấm với \. nhưng Tôi đã gặp phải vấn đề này nhiều lần: \. mang lại cho tôi kết quả tương tự như .

Tuy nhiên, hai biểu thức này làm việc cho tôi:

$ grep -r 0\\.49 * 

Và:

$ grep -r 0[.]49 * 

Tôi đang sử dụng một "bình thường" vỏ bash trên Ubuntu và Archlinux.

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