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à -P
cho 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 .js
mà không được xác định trước bằng debug
phương tiện nào (vì chúng tôi đang đảo ngược các trận đấu) mà chỉ những .js
tệ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 OK
và js
vì grep -v
nó đượ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ì grep
sử 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 -T
nguyê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 \t
và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ể.
OK
và.js
trên cùng một dòng không?