Найти слово, которое содержит более 50 символов

Я пытаюсь использовать find в сочетании с grep, чтобы найти все файлы php на моем веб-сервере, в которых есть слово (любая последовательность символов, кроме пробела), содержащее более 50 символов.

У меня есть эта база:

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

Но не работает, как ожидалось.

Благодаря

1
задан 5 March 2014 в 23:14

2 ответа

Лично я использую egrep только:

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

Видят man egrep для понимания то, что происходит в предыдущей команде.

0
ответ дан 5 March 2014 в 23:14

Это не работает как ожидалось потому что -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,}' {} \;
1
ответ дан 5 March 2014 в 23:14

Другие вопросы по тегам:

Похожие вопросы: