Encontre palavras com mais de 50 caracteres

1

Eu estou tentando usar o find em combinação com o grep para encontrar todos os arquivos php no meu servidor web que possuem uma palavra (qualquer seqüência de caracteres exceto espaços em branco) com mais de 50 caracteres.

Eu tenho essa base:

find . -name '*.php' -exec fgrep -q '.{50}' {} \; -print

Mas não está funcionando como esperado.

Obrigado

    
por Hommer Smith 05.03.2014 / 20:14

2 respostas

1

Pessoalmente, uso apenas egrep :

egrep -nor '[^ ]{50,}' .

Veja man egrep para entender o que está acontecendo no comando anterior.

    
por Radu Rădeanu 05.03.2014 / 20:21
1

Não está funcionando como esperado porque -q significa quiet , faz com que grep não imprima nada, só é útil ao testar o status de grep . O que você quer está mais perto de:

find . -name '*.php' -exec grep -lP '\w{50,}' {} \;

O -l significa "imprimir o nome do arquivo correspondente" e -P ativa as expressões regulares compatíveis perl para que possamos usar o \w que é uma forma abreviada de caracteres de palavra correspondentes (basicamente [a-zA-Z0-9-_] , mas os detalhes dependem Usar [^ ] é uma boa ideia, mas contará \t e \r e até \n , além de coisas estranhas como ~@#$%^&*() como palavras e suponho que não é isso que você quer. / p>

Se você quiser combinar qualquer caractere não-espaço, use isso:

find . -name '*.php' -exec grep -lP '\S{50,}' {} \;
    
por terdon 05.03.2014 / 21:32