Я хочу найти строку текста во всех файлах в каталоге (а не в его подкаталогах; я знаю, что -rопция делает это, но это не то, что я хочу).
Бег
grep "string" /path/to/dirя должен был это сделать, я читал, но это дает мне ошибку:
grep: dir: это каталог
Затем я попытался запустить
grepнесколько файлов.grep "string" .bashrc .bash_aliasesработает отлично.grep "string" .bash*работает как задумано тоже.grep "string" *дает мне ошибки:grep: data: Is a directory grep: Desktop: Is a directory grep: Documents: Is a directory grep: Downloads: Is a directory ...
Только ошибки напечатаны, я не получаю соответствующие строки. Я пытался использовать -sопцию, но безрезультатно.
Итак, мои вопросы:
Почему я не могу использовать
grepкаталог, как в (1), когда я должен это сделать? Я видел это в большом количестве примеров в Интернете.
Редактировать : когда я говорю «использование grep в каталоге», я имею в виду «поиск во всех файлах в этом каталоге, за исключением его подкаталогов». Я считаю, что это то, что делает grep, когда вы передаете ему каталог вместо файла. Я не прав?Пожалуйста, дайте мне объяснение о том, как
grepэто могло бы объяснить поведение команд в (2).
Изменить : Позвольте мне быть более конкретным. Почему использование подстановочных знаков для указания нескольких файлов для поиска для работы,.bash*а не с*или даже./*?Как я могу найти все файлы в каталоге (а не в его подкаталогах), используя
grep?
grep "string" .bash*тоже работает .
grep "string" * .* 2>/dev/nullилиgrep -s "string" * .*
*, называемые globbing. Глобирование не включает имена файлов, начинающиеся с точки, такой.bashrcкак стандарт. Вы можете установить параметры оболочки так, чтобы она включала эти файлы, но вы можете немного запутаться, если не знаете, что делаете. Хорошее руководство по пониманию глобинга можно найти здесь mywiki.wooledge.org/glob