Я пытаюсь использовать find в сочетании с grep, чтобы найти все файлы php на моем веб-сервере, в которых есть слово (любая последовательность символов, кроме пробела), содержащее более 50 символов.
У меня есть эта база:
find . -name '*.php' -exec fgrep -q '.{50}' {} \; -print
Но не работает, как ожидалось.
Благодаря
Лично я использую egrep
только:
egrep -nor '[^ ]{50,}' .
Видят man egrep
для понимания то, что происходит в предыдущей команде.
Это не работает как ожидалось потому что -q
средства quiet
, это вызывает grep
для не печати чего-либо это только полезно при тестировании существовать состояния grep
. То, что Вы хотите, ближе к:
find . -name '*.php' -exec grep -lP '\w{50,}' {} \;
-l
означает, "печатают название файла соответствия" и -P
активирует жемчуг совместимые регулярные выражения, таким образом, мы можем использовать \w
который является сокращением от символов соответствующего слова (в основном [a-zA-Z0-9-_]
но детали зависят от Вашей локали. Используя [^ ]
хорошая идея, но рассчитает \t
и \r
и даже \n
, а также более странные вещи как ~@#$%^&*()
как слова и я предполагаю, что это не то, что Вы хотите.
Если Вы хотите соответствовать какому-либо непробелу, используйте это вместо этого:
find . -name '*.php' -exec grep -lP '\S{50,}' {} \;