Pessoalmente, uso apenas egrep
:
egrep -nor '[^ ]{50,}' .
Veja man egrep
para entender o que está acontecendo no comando anterior.
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
Pessoalmente, uso apenas egrep
:
egrep -nor '[^ ]{50,}' .
Veja man egrep
para entender o que está acontecendo no comando anterior.
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,}' {} \;