web-dev-qa-db-fra.com

Rechercher un mot contenant plus de 50 caractères

J'essaie d'utiliser find en combinaison avec grep pour trouver tous les fichiers php sur mon serveur Web qui ont un mot (n'importe quelle séquence de caractères sauf un espace) avec plus de 50 caractères.

J'ai cette base:

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

Mais ne fonctionne pas comme prévu.

Merci

1
Hommer Smith

Personnellement, j'utilise egrep uniquement:

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

Voir man egrep pour comprendre ce qui se passe dans la commande précédente.

1
Radu Rădeanu

Cela ne fonctionne pas comme prévu car -q Signifie quiet, il empêche grep de ne rien imprimer, il n'est utile que lors du test de l'état existant de grep. Ce que vous voulez est plus proche de:

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

-l Signifie "imprimer le nom du fichier correspondant" et -P Active les expressions régulières compatibles Perl afin que nous puissions utiliser le \w Qui est un raccourci pour faire correspondre les caractères Word (essentiellement [a-zA-Z0-9-_] Mais les détails dépendent de votre région. L'utilisation de [^ ] Est une bonne idée mais comptera \t Et \r Et même \n, Comme ainsi que des choses plus étranges comme ~@#$%^&*() en tant que mots et je suppose que ce n'est pas ce que vous voulez.

Si vous souhaitez faire correspondre tout caractère non-espace, utilisez-le à la place:

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