it-roy-ru.com

Команда Unix для поиска текстовой строки во всех файлах

Как получить Unix для поиска во всех файлах строку "привет"?

Я пробовал следующее, но это не работает:

Sudo grep "hello" | find / -name "*" 2>/dev/null

У кого-нибудь есть другие идеи?

Спасибо.

7
MorganR

Может этот?

Sudo cd / && grep -rn "hello" *

Правка: опция 'n', конечно, не нужна - она ​​просто отображает номера строк, и я нахожу это хорошим. Опция 'r' указывает grep выполнять рекурсивный поиск в каталогах.

27
Ivaylo Strandjev

Использование

grep -r 'pattern' /

Если ваш grep поддерживает -r, (GNU grep поддерживает); если не использовать

find / -type f -exec grep 'pattern' {} +

Если ваш find поддерживает -exec с +, в противном случае используйте

find / -type f -printf '%p\0' | xargs -0 grep 'pattern'

Если ваш find поддерживает -printf, а ваш xargs поддерживает -0, или

find / -type f -print0 | xargs -0 grep 'pattern'

Если ваш find поддерживает только -print0, а ваш xargs поддерживает -0. Во всех остальных случаях прибегают к

find / -type f | xargs grep 'pattern'

Это максимально совместимо с оговоркой о том, что некоторые необычные имена файлов не будут выделяться, а созданные имена файлов могут представлять угрозу безопасности.

Обратите внимание, что вам нужно быть пользователем root, чтобы быть уверенным в поиске всех файлов, и что поиск будет чувствительным к регистру, если вы не добавите -i в grep.

10
Sorpigal

Это?

find . -exec grep -H "hello" {} \;
2
HighKing