2010-09-09 39 views

Trả lời

37

Điều đó tùy thuộc. Nếu bạn sử dụng grep thông thường, bạn không thoát:

echo '(foo)'|grep '(fo*)' 

Bạn thực sự phải thoát nếu bạn muốn sử dụng dấu ngoặc đơn làm nhóm.

Nếu bạn sử dụng extended regular expressions, bạn không thoát:

echo '(foo)'|grep -E '\(fo*\)' 
+1

Khi tôi sử dụng grep -rin init() * trong thư mục, nó khiếu nại lỗi cú pháp gần mã thông báo không mong muốn (Làm cách nào để sửa lỗi này. –

+0

Tôi xin lỗi, tôi không hiểu. Tôi có một vài tệp javascript, với một init() chức năng gọi là trong vài nơi trong họ.Tôi muốn tìm hiểu nơi mà tất cả init() được gọi là, bằng cách sử dụng grep -rin init() * trong thư mục .. Nó phàn nàn về cú pháp không hợp lệ gần (. –

+3

@Megha, chỉ cần làm rõ, đó là lỗi vỏ vì bạn không báo giá regex. –

4
$ echo "init()" | grep -Erin 'init\([^)]*\)' 
1:init() 

$ echo "init(test)" | grep -Erin 'init\([^)]*\)' 
1:init(test) 

$ echo "initwhat" | grep -Erin 'init\([^)]*\)' 
+0

Điều này không đúng. Nó sẽ chỉ dễ dàng khớp với "initwhatever", vì theo mặc định các dấu gạch chéo ngược được tạo ra sẽ tạo các nhóm. Như tôi đã nói ở trên, bạn không thoát khỏi parens với grep thường xuyên. –

+0

Tôi tin rằng điều này là tốt vì '-E' tương đương với egrep. – gkanwar

1

Di chuyển đến thư mục gốc của bạn (nếu bạn nhận thức được nơi file JavaScript). Sau đó làm như sau.

grep 'init()' *.js 
+0

để grep vào tất cả các thư mục con một cách đệ quy, đề xuất thêm tham số -r – hejiaming007

18

Nếu bạn muốn tìm kiếm chính xác chuỗi "init()" sau đó sử dụng fgrep "init()" hoặc grep -F "init()".

Cả hai đều sẽ thực hiện đối sánh chuỗi cố định, tức là sẽ xử lý mẫu dưới dạng chuỗi đơn giản để tìm kiếm chứ không phải là regex. Tôi tin rằng nó cũng nhanh hơn so với thực hiện tìm kiếm regex.

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