2011-12-29 37 views
23

Làm cách nào để bỏ qua các thư mục cụ thể qua RegEx với ack?ack: Loại trừ các thư mục cụ thể khỏi tìm kiếm qua regex

Tôi có thể sử dụng tùy chọn --ignore-dir, nhưng điều này không cho phép tôi chỉ định RegEx. Tôi muốn có thể bỏ qua bất kỳ thư mục nào có các từ test hoặc tests hoặc các mẫu phức tạp hơn trong tên của nó.

Tôi cũng đã cố gắng một lookbehind tiêu cực qua

ack -G '(?<!test)' pattern 

nhưng điều này không hoạt động. Nó không loại trừ các thư mục test.

Trả lời

20

Sử dụng tùy chọn không có giấy tờ "--invert-file-match" (ack phiên bản trên hệ thống của tôi: 1,96):

$ ack pattern -G 'test|tests' --invert-file-match 

Vâng, nó là loại tài liệu:

$ ack --help|grep invert 
-v, --invert-match Invert match: select non-matching lines 
--invert-file-match Print/search handle files that do not match -g/-G. 

Nó không phải là tài liệu trong perldoc của nó.

+0

Tuyệt vời - cảm ơn!Không có gì về điều này trong trang người đàn ông tôi đang tìm kiếm một trong hai, nhưng nó hoạt động. – AmigoNico

5

Vì lợi ích của người sử dụng phiên bản trước 1.96 của ack (như tôi), bạn có thể sử dụng regex nhìn xung quanh để làm điều này. Dưới đây là một ví dụ:

ack --java 'text-pattern' -G '^((?!(test|target)).)*$' 

này sẽ tìm kiếm trong tất cả các text-patternJava file đệ quy mà KHÔNG có những lời test hoặc target trong con đường của mình (từ.).

+0

Cấu trúc này '^ ((?! (Test | target)).) * $' Có nghĩa là gì? – Scit

10

Với ack2, có vẻ như you can't use holygeek's solution.

Đây là cách tôi muốn làm điều đó bằng -v-x:

ack -v -g 'test' | ack -x pattern 

Tổng quát hơn, 'test' có thể được một regex cho dirs để loại trừ

+1

Thật vậy cho ack2, đây là những gì bạn muốn. Cảm ơn! – igniteflow

2

Trong các phiên bản gần đây của ack, bạn có thể sử dụng cụm từ thông dụng với --ignore-dir.

Từ this thread:

Có, trong 2.15_01 chúng tôi đã thêm:

  • ack bây giờ hỗ trợ --ignore-dir = trận đấu: .... Cảm ơn, Ailin Nemui! (Vé # GitHub 42)

GitHub liên kết: https://github.com/petdance/ack2/issues/42

Đáng buồn thay, tôi nghĩ rằng chỉ hỗ trợ này phù hợp với tên thư mục cơ sở, không phải là đường dẫn đầy đủ. Ví dụ:

Ví dụ: bạn không thể khớp với đường dẫn như ".*/docs/generated/.*".

Để biết điều đó, hãy xem (vẫn mở) GitHub issue 291.

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