Saya hanya akan melewati satu detik grepuntuk menghapusnya:
grep -r --exclude={\*~,\*.map} "OK" bar/ | grep -vP '(?<!debug)\.js'
The -vmembalikkan pertandingan, mencetak baris yang tidak cocok dengan pola dan -Pmemungkinkan Perl Regular Expressions Kompatibel yang membiarkan kita menggunakan lookbehinds negatif . Regex khusus ini, akan cocok dengan .jsyang tidak diawali dengan debugcara yang berarti (karena kami membalikkan pertandingan) bahwa hanya .jsfile - file itu akan dicetak.
Namun, seperti yang ditunjukkan oleh @QuestionOverflow di dalam komentar, itu bisa memiliki efek samping yang tidak diinginkan dengan memfilter garis yang mengandung OKdan jskarena grep -vditerapkan pada seluruh output, bukan hanya nama file. Untuk menghindarinya, tambahkan saja titik dua (itulah yang grepdigunakan untuk memisahkan nama file dari konten file):
grep -r --exclude={*~,*.map} "OK" bar/ | grep -vP '(?<!debug).js:'
Itu masih akan gagal jika baris input Anda berisi foo.js:atau jika nama file Anda berisi :. Jadi, yang pasti, gunakan pendekatan yang berbeda:
grep -Tr --exclude={*~,*.map} "OK" bar/ | grep -vP '(?<!debug).js\t'
The -Tmenyebabkan grepuntuk mencetak tab antara nama file dan isi file. Jadi, jika kita cukup menambahkan a \tke akhir regex, itu hanya akan cocok dengan nama file, dan bukan isi baris.
Namun, menggunakanfind mungkin lebih masuk akal terlepas dari itu.
OKdan.jspada baris yang sama?