Tôi muốn grep cho một cuộc gọi hàm 'init()' trong tất cả các tệp JavaScript trong một thư mục. Làm thế nào để làm điều này bằng cách sử dụng grep?Cách thoát dấu ngoặc đơn trong grep
Cụ thể, làm thế nào để thoát khỏi dấu ngoặc đơn, ()
?
Tôi muốn grep cho một cuộc gọi hàm 'init()' trong tất cả các tệp JavaScript trong một thư mục. Làm thế nào để làm điều này bằng cách sử dụng grep?Cách thoát dấu ngoặc đơn trong grep
Cụ thể, làm thế nào để thoát khỏi dấu ngoặc đơn, ()
?
Đ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*\)'
$ echo "init()" | grep -Erin 'init\([^)]*\)'
1:init()
$ echo "init(test)" | grep -Erin 'init\([^)]*\)'
1:init(test)
$ echo "initwhat" | grep -Erin 'init\([^)]*\)'
Đ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. –
Tôi tin rằng điều này là tốt vì '-E' tương đương với egrep. – gkanwar
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
để 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
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.
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. –
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 (. –
@Megha, chỉ cần làm rõ, đó là lỗi vỏ vì bạn không báo giá regex. –