Kecualikan file yang memiliki garis teks sangat panjang dari output grep


18

Saya sering menjalankan perintah grep untuk menemukan hal-hal dalam kode saya, tetapi masalah dengan proyek web adalah bahwa akan sering ada file JavaScript dan CSS terkompresi yang membuat satu baris teks yang besar, sehingga jika ditemukan kecocokan, seluruh jendela terminal adalah diisi lebih dari 1000 baris, membuatnya sangat tidak praktis untuk menemukan apa yang saya cari.

Jadi apakah ada cara untuk menghindari file yang mengatakan satu baris teks lebih dari 200 karakter?

Jawaban:


20

Dengan GNU grep dan xargs:

grep -rLZE '.{200}' . | xargs -r0 grep pattern

Atau, Anda dapat memotong output grep:

grep -r pattern . | cut -c1-"$COLUMNS"

atau katakan terminal Anda untuk tidak membungkus teks jika mendukungnya:

tput rmam
grep -r pattern .

atau gunakan less -S

grep -r pattern . | less -S

3
Menggunakan regex dari contoh pertama Anda, masukkan ke grep dengan kecocokan invert ... | grep -v -E '.{200}',, berfungsi juga. Misalnya untuk menemukan semua lini * file js di bawah dir saat ini dengan ".name" di dalamnya yang tidak lebih dari 200 karakter: find . -name "*.js" -exec grep -H \\.name {} \; | grep -v -E '.{200}'
Gary S. Weaver

3

Opsi 1: Anda dapat mengecualikan file yang cocok dengan pola tertentu:

grep --exclude='*.min.*'

Ini akan mengecualikan script.min.jsdan style.min.css... grepPilihan lain termasuk --exclude-from=FILEdan--exclude-dir=DIR

Opsi 2: Saya tidak yakin apakah ini praktis, tetapi Anda dapat cut200 karakter pertama dari setiap baris, dan kemudian grep:

grep -H [OPTIONS] PATTERN [FILE...] | cut -c1-200 | grep PATTERN

Yang pertama grepmelakukan pencocokan awal dan menampilkan nama file dan baris, yang kedua memastikan PATTERNmasih ada setelah cutting baris.


2

Dalam situasi seperti ini, saya suka memahami pola dengan konteks lingkungan (katakanlah 30 karakter):

grep -Po '.{0,30}pattern.{0,30}' *.js
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.