Çok uzun metin satırları olan dosyaları grep çıktısından hariç tutma


18

Sık sık kodumda bir şeyler bulmak için grep komutları çalıştırıyorum, ancak web projelerinde sorun genellikle büyük bir metin satırı oluşturan sıkıştırılmış JavaScript ve CSS dosyaları olacak, böylece bir eşleşme bulunursa, tüm terminal penceresi aradığımı bulmayı son derece pratik hale getirerek 1000 satırdan daha uzun bir süre doldurdu.

Öyleyse, 200 karakterden fazla tek satır metin içeren dosyalardan kaçınmanın bir yolu var mı?

Yanıtlar:


20

GNU grep ve xargs ile:

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

Alternatif olarak, grep'in çıktısını kesebilirsiniz:

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

veya terminalinize destekliyorsa metni sarmamasını söyleyin:

tput rmam
grep -r pattern .

ya da kullan less -S

grep -r pattern . | less -S

3
İlk örneğinizden regex kullanarak, ters eşleme ile grep'e borulama ... | grep -v -E '.{200}', çalışır. Örneğin, * .js dosyalarının şu anki dizinde ".name" ile 200 karakterden uzun olmayan tüm satırları bulmak için: find . -name "*.js" -exec grep -H \\.name {} \; | grep -v -E '.{200}'
Gary S. Weaver

3

Seçenek 1: Belirli bir kalıpla eşleşen dosyaları hariç tutabilirsiniz:

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

Bu hariç tutulur script.min.jsve style.min.css... Diğer grepseçenek içerir --exclude-from=FILEve--exclude-dir=DIR

Seçenek 2: Bunun pratik olup olmadığından emin değilim, ancak cuther satırın ilk 200 karakterini ve sonra grepbunları yapabilirsiniz:

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

Birincisi ilk grepeşleşmeyi yapar ve dosya adını ve satırı çıkarır, ikincisi çizgileri PATTERNbağladıktan sonra hala orada olmasını sağlar cut.


2

Bu tür bir durumda, bir mahalle bağlamıyla bir desen grep etmek istiyorum (30 karakter diyelim):

grep -Po '.{0,30}pattern.{0,30}' *.js
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.