Exclui arquivos que possuem linhas de texto muito longas na saída do grep

15

Freqüentemente executo comandos do grep para encontrar coisas no meu código, mas o problema com projetos da web é que frequentemente haverá arquivos CSS e JavaScript compactados que criam uma linha enorme de texto, para que, se uma correspondência for encontrada, a janela do terminal é preenchida por mais de 1.000 linhas, tornando extremamente impraticável encontrar o que estou procurando.

Existe uma maneira de evitar arquivos que tenham linhas de texto simples com mais de 200 caracteres?

    
por Mark Cameron 04.02.2014 / 16:28

3 respostas

17

Com o GNU grep e xargs:

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

Alternativamente, você pode cortar a saída do grep:

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

ou diga ao seu terminal para não quebrar o texto se ele for compatível:

tput rmam
grep -r pattern .

ou use less -S

grep -r pattern . | less -S
    
por 04.02.2014 / 17:06
3

Opção 1: Você pode excluir arquivos que correspondam a um determinado padrão:

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

Isso excluirá script.min.js e style.min.css ... Outra opção grep inclui --exclude-from=FILE e --exclude-dir=DIR

Opção 2: Não tenho certeza se isso é prático, mas você pode cut os primeiros 200 caracteres de cada linha e, em seguida, grep deles:

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

O primeiro grep faz uma correspondência inicial e gera o nome do arquivo e a linha, o segundo garante que PATTERN ainda esteja lá após cut das linhas.

    
por 04.02.2014 / 16:40
2

Nesse tipo de situação, gosto de usar um padrão com um contexto de vizinhança (digamos 30 caracteres):

grep -Po '.{0,30}pattern.{0,30}' *.js
    
por 09.02.2015 / 19:27

Tags