Я пытаюсь использовать find в сочетании с grep, чтобы найти все файлы php на моем веб-сервере, в которых есть слово (любая последовательность символов, кроме пробела), содержащее более 50 символов.
У меня есть эта база:
find . -name '*.php' -exec fgrep -q '.{50}' {} \; -print
Но не работает, как ожидалось.
Благодаря
Это не работает как ожидалось, потому что -q
средства quiet
, это заставляет grep
не печатать что-либо, это только полезно при тестировании существовать состояния grep
. То, что Вы хотите, ближе к:
find . -name '*.php' -exec grep -lP '\w{50,}' {} \;
Эти -l
означает, "печатают название файла соответствия", и -P
активирует жемчуг совместимые регулярные выражения, таким образом, мы можем использовать \w
, который является стенографией для символов соответствующего слова (в основном [a-zA-Z0-9-_]
, но детали зависят от Вашей локали. Используя [1 110] хорошая идея, но рассчитает \t
и \r
и даже \n
, а также более странные вещи как [1 114] как слова, и я предполагаю, что это не то, что Вы хотите.
, Если Вы хотите соответствовать какой-либо непробел, используйте это вместо этого:
find . -name '*.php' -exec grep -lP '\S{50,}' {} \;
[^ ]
только ищет непробелы и будет соответствовать\t
и\r
и\n
. Наконец, я рекомендуюgrep -E
вместо устаревшего (см.man grep
)egrep
, который постепенно сокращается. – Pablo 15.05.2020, 05:44egrep -or '[^ ]{50,}' . | cut -d: -f1
– Álvaro Arranz 15.05.2020, 05:45