Excluir arquivos que possuem linhas muito longas de texto da saída grep


18

Costumo executar comandos grep para encontrar coisas no meu código, mas o problema com projetos da Web é que frequentemente haverá arquivos JavaScript e CSS compactados que criam uma enorme linha de texto, de modo que, se uma correspondência for encontrada, toda a janela do terminal será exibida. preenchido por mais de 1000 linhas, tornando extremamente impraticável encontrar o que estou procurando.

Portanto, existe uma maneira de evitar arquivos que digam linhas únicas de texto com mais de 200 caracteres?

Respostas:


20

Com GNU grep e xargs:

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

Como alternativa, 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 suportar:

tput rmam
grep -r pattern .

ou use less -S

grep -r pattern . | less -S

3
Usando regex do seu primeiro exemplo, canalizar para grep com correspondência invertida ... | grep -v -E '.{200}', também funciona. Por exemplo, para encontrar todas as linhas de arquivos * .js no diretório atual com ".name" nelas com mais de 200 caracteres: find . -name "*.js" -exec grep -H \\.name {} \; | grep -v -E '.{200}'
Gary S. Weaver

3

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

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

Isso excluirá script.min.jse style.min.css... Outra grepopção inclui --exclude-from=FILEe--exclude-dir=DIR

Opção 2: Não sei se isso é prático, mas você pode cutos primeiros 200 caracteres de cada linha e, em seguida, grepeles:

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

O primeiro grepfaz uma correspondência inicial e gera o nome do arquivo e a linha, o segundo garante que o arquivo PATTERNainda esteja lá após a cutmarcação das linhas.


2

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

grep -Po '.{0,30}pattern.{0,30}' *.js
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.