Как я могу использовать grep, чтобы найти слово внутри папки?
в Windows, я бы сделал поиск для поиска слова внутри папки. Точно так же, я хочу знать, если определенное слово происходит внутри каталога, содержащего много подкаталогов и файлов. Мои поиски синтаксиса grep показывают, что я должен указать имя файла, т. е. grep string filename.
теперь, я не знаю имя, и что мне делать?
Друг предложил сделать grep -nr string, но я не знаю, что это значит, и я не получил никаких результатов с ним (нет ответа, пока я не выдам ctrl + c).
11 ответов:
grep -nr 'yourString*' .точка в конце выполняет поиск в текущем каталоге. Значение для каждого параметра:
-n Show relative line number in the file 'yourString*' String for search, followed by a wildcard character -r Recursively search subdirectories listed . Directory for search (current directory)
grep -nr 'MobileAppSer*' .(хотел найтиMobileAppServlet.javaилиMobileAppServlet.classилиMobileAppServlet.txt;'MobileAppASer*.*'другой способ сделать то же самое.)для проверки дополнительных параметров используйте man grep.
grep -nr string my_directoryдополнительные примечания: это удовлетворяет синтаксису
grep [options] string filenameпотому что в Unix-подобных системах каталог-это своего рода файл (есть термин "обычный файл", специально относящийся к сущностям, которые называются просто "файлы" в Windows).
grep -nr stringчитает содержимое для поиска из стандартного ввода, поэтому он просто ждет ввода от вас и перестает делать это при нажатии ^C (он также остановится на ^D, что является комбинацией клавиш для конец файла.)
: Глобальное Регулярное Выражение Print/Parser/Processor / Program.
Вы можете использовать это для поиска в текущем каталоге.
Вы можете указать-R для "рекурсивного", что означает, что программа ищет во всех подпапках и их подпапках, а также в подпапках их подпапок и т. д.grep -R "your word" .
-nвыведет номер строки, где он соответствует в файле.-iбудет выполнен поиск без учета регистра (капитальные/некапитальные письма.)grep -inR "your regex pattern" .
есть:
find directory_name -type f -print0 | xargs -0 grep -li wordно это может быть немного много для новичка.
findэто каталог общего назначения walker / lister,-type fозначает "ищите простые файлы, а не каталоги и именованные каналы и что у вас есть",-print0означает "вывести их на стандартный вывод с использованием нулевых символов в качестве разделителей". Выход изfindотправленоxargs -0и это захватывает его стандартный ввод в кусках (чтобы избежать ограничений длины командной строки) с помощью нулевые символы в качестве разделителя записей (а не стандартной новой строки) и применяетсяgrep -li wordдля каждого набора файлов. Наgrep,-lозначает "список файлов, которые соответствуют" и-iозначает "нечувствительный к регистру"; обычно вы можете комбинировать параметры одного символа, чтобы увидеть-liчаще, чем-l -i.если вы не используете
-print0и-0тогда вы столкнетесь с проблемами имена файлов, содержащие пробелы, поэтому их использование является хорошей привычкой.
grep -nr search_string search_dirбудет делать рекурсивный (то есть каталог и все его подкаталоги) поиск строки search_string. (как правильно ответил уста).
причина, по которой вы не получали никаких ответов с предложением вашего друга:
grep -nr string- это потому, что не был указан в каталоге. Если вы находитесь в каталоге, в котором вы хотите выполнить поиск, вы должны сделать следующее:
grep -nr string .важно включить '.'характер, как это говорит grep для поиска в этом каталоге.
grep -r "yourstring" *Найдет "yourstring" в любых файлах и папкахтеперь, если вы хотите искать две разные строки одновременно, вы всегда можете использовать опцию E и добавлять слова для поиска. пример после перерыва
grep -rE "yourstring|yourotherstring|$" *будет искать список мест, гдеyourstringилиyourotherstringигр
еще один вариант, который мне нравится использовать:
find folder_name -type f -exec grep your_text {} \;- тип f возвращает вам только файлы, а не папки
- exec и {} запускает grep на файлы, которые были найдены в поиске (точный синтаксис "-exec command {}").
почему бы не сделать рекурсивный поиск, чтобы найти все экземпляры в подразделе каталоги:
grep -r 'text' *это работает как шарм.
ответ выбран хорошо, и это работает, но это не правильный способ сделать это, потому что:
grep -nr yourString* .это на самом деле ищет строку
"yourStrin"и"g"0 или много раз.так что правильный способ сделать это:
grep -nr \w*yourString\w* .эта команда выполняет поиск строки с любым символом до и после в текущей папке.
Не используйте grep. Скачать Серебряный Искатель или ripgrep. Они оба выдающиеся, и путь быстрее, чем grep или ack с тоннами вариантов.
подобно ответу, опубликованному @eLRuLL, более простой способ указать поиск, который уважает границы слов, - использовать :
grep -wnr "yourString" .
Comments