Я хочу найти строку текста во всех файлах в каталоге (а не в его подкаталогах; я знаю, что -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