Я хочу рекурсивно искать все файлы из каталога, в котором я нахожусь, для определенной строки.
Я старался
grep -r -i my_string
и я попробовал это в тестовой папке с двумя крошечными файлами, но это не нашло строку.
Кроме того, есть ли какой-то особый способ определения «содержит» вместо сопоставления всего слова?
grep -r -o -i "your_string" *
(с "кавычками).Ответы:
Вы ищете имя файла или слово внутри файла? grep ищет в файлах, что, кажется, то, что вы хотите.
grep использует регулярные выражения - фактически это то, что означает часть re. Таким образом, он не использует обычные символы подстановки bash; то есть,
abc*
он не найдет слова, начинающиеся с abc, он найдет слова, начинающиеся с ab, затем ноль или более с. Но да, если вы просто дадите ему образец, он найдет его где угодно, без знания целых слов. Если вы хотите найти целые слова, вам нужно создать регулярное выражение, чтобы сказать это.Но, как и большинство команд, вам нужно поставить имя файла (ов) в конце команды, так что ваш пример будет просто сидеть и ждать имя файла.
Как сказал @plink, используйте
(или
*.*
, или другие спецификации файлов). Ошибки могут быть проигнорированы. Если вы получаете много ошибок, вы можете добавить2>/dev/null
в конец, что перенаправит stderr на нулевое устройство.источник