Saya hanya akan melewati satu detik grep
untuk menghapusnya:
grep -r --exclude={\*~,\*.map} "OK" bar/ | grep -vP '(?<!debug)\.js'
The -v
membalikkan pertandingan, mencetak baris yang tidak cocok dengan pola dan -P
memungkinkan Perl Regular Expressions Kompatibel yang membiarkan kita menggunakan lookbehinds negatif . Regex khusus ini, akan cocok dengan .js
yang tidak diawali dengan debug
cara yang berarti (karena kami membalikkan pertandingan) bahwa hanya .js
file - 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 OK
dan js
karena grep -v
diterapkan pada seluruh output, bukan hanya nama file. Untuk menghindarinya, tambahkan saja titik dua (itulah yang grep
digunakan 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 -T
menyebabkan grep
untuk mencetak tab antara nama file dan isi file. Jadi, jika kita cukup menambahkan a \t
ke akhir regex, itu hanya akan cocok dengan nama file, dan bukan isi baris.
Namun, menggunakanfind
mungkin lebih masuk akal terlepas dari itu.
OK
dan.js
pada baris yang sama?