Tôi sẽ chỉ vượt qua điều đó trong một giây grepđể loại bỏ chúng:
grep -r --exclude={\*~,\*.map} "OK" bar/ | grep -vP '(?<!debug)\.js'
Sự -vđảo ngược khớp, in các dòng không khớp với mẫu và -Pcho phép Biểu thức chính quy tương thích Perl cho phép chúng ta sử dụng các giao diện tiêu cực . Regex cụ thể này, sẽ khớp .jsmà không được xác định trước bằng debugphương tiện nào (vì chúng tôi đang đảo ngược các trận đấu) mà chỉ những .jstệp đó sẽ được in.
Tuy nhiên, như @QuestionOverflow đã chỉ ra int các bình luận, điều đó có thể có tác dụng phụ ngoài ý muốn là lọc ra các dòng có chứa OKvà jsvì grep -vnó được áp dụng cho toàn bộ đầu ra, không chỉ tên tệp. Để tránh điều đó, chỉ cần thêm dấu hai chấm (đó là những gì grepsử dụng để tách tên tệp khỏi nội dung tệp):
grep -r --exclude={*~,*.map} "OK" bar/ | grep -vP '(?<!debug).js:'
Điều đó vẫn sẽ thất bại nếu dòng đầu vào của bạn chứa foo.js:hoặc nếu tên tệp của bạn chứa :. Vì vậy, để chắc chắn, sử dụng một cách tiếp cận khác:
grep -Tr --exclude={*~,*.map} "OK" bar/ | grep -vP '(?<!debug).js\t'
Các -Tnguyên nhân grepđể in một tab giữa tên tệp và nội dung tệp. Vì vậy, nếu chúng ta chỉ cần thêm một \tvào cuối regex, nó sẽ chỉ khớp với tên tệp chứ không phải nội dung của dòng.
Tuy nhiên, sử dụngfind có thể có ý nghĩa hơn bất kể.
OKvà.jstrên cùng một dòng không?