linux поиск - Как найти все файлы, содержащие определенный текст в Linux?




15 Answers

Выполните следующие действия:

grep -rnw '/path/to/somewhere/' -e 'pattern'
  • -r или -R является рекурсивным,
  • -n - номер строки, и
  • -w означает совпадение всего слова.
  • -l (нижний регистр L) можно добавить, чтобы просто указать имя файла совпадающих файлов.

Наряду с ними флаги --exclude , --include , --exclude-dir могут использоваться для эффективного поиска:

  • Это будет искать только те файлы, у которых есть .c или .h расширения:

    grep --include=\*.{c,h} -rnw '/path/to/somewhere/' -e "pattern"
    
  • Это исключает поиск всех файлов, заканчивающихся расширением .o:

    grep --exclude=*.o -rnw '/path/to/somewhere/' -e "pattern"
    
  • Для каталогов можно исключить конкретный каталог (ы) через параметр --exclude-dir . Например, это исключает dir1 /, dir2 / dir2 и все из них, соответствующие * .dst /:

    grep --exclude-dir={dir1,dir2,*.dst} -rnw '/path/to/somewhere/' -e "pattern"
    

Это очень хорошо для меня, для достижения почти той же цели, что и ваша.

Для получения дополнительных параметров проверьте man grep .

текста файлах

Я пытаюсь найти способ сканирования всей системы Linux для всех файлов, содержащих определенную строку текста. Чтобы уточнить, я ищу текст в файле, а не в имени файла.

Когда я смотрел, как это сделать, я дважды сталкивался с этим решением:

find / -type f -exec grep -H 'text-to-find-here' {} \;

Однако это не работает. Кажется, он отображает каждый файл в системе.

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




Вы можете использовать ack . Это похоже на grep для исходного кода. Вы можете просмотреть всю свою файловую систему.

Просто делать:

ack 'text-to-find-here'

В корневом каталоге.

Вы также можете использовать регулярные выражения , указать тип файла и т. Д.

ОБНОВИТЬ

Я только что открыл Silver Searcher , который похож на ack, но на 3-5 раз быстрее, чем он, и даже игнорирует шаблоны из файла .gitignore .




Вы можете использовать это:

grep -inr "Text" folder/to/be/searched/



Если ваш grep не поддерживает рекурсивный поиск, вы можете комбинировать find с xargs :

find / -type f | xargs grep 'text-to-find-here'

Мне это легче запомнить, чем формат find -exec .

Это приведет к отображению имени файла и содержимого соответствующей строки, например

/home/rob/file:text-to-find-here

Дополнительные флаги, которые вы можете добавить в grep :

  • -i case -чувствительный поиск
  • -l - выводить только имя файла, в котором было найдено совпадение
  • -h - выводить только строку, которая соответствует (а не имя файла)



grep -insr "pattern" *
  • i : Игнорировать различия в случаях как в PATTERN, так и в входных файлах.
  • n : Префикс каждой строки вывода с номером строки 1 в его входном файле.
  • s : Подавлять сообщения об ошибках о несуществующих или нечитаемых файлах.
  • r : Прочитайте все файлы в каждом каталоге, рекурсивно.



Используйте pwd для поиска из любого каталога, в котором вы находитесь, рекурсивный вниз

grep -rnw `pwd` -e "pattern"

Обновление. В зависимости от используемой вами версии grep вы можете опустить pwd . О новых версиях . представляется по умолчанию для grep, если каталог не указан таким образом:

grep -rnw -e "pattern"

или же

grep -rnw "pattern"

будет делать то же, что и выше!




grep можно использовать, даже если мы не ищем строку.

Просто бег,

grep -RIl "" .

будет распечатывать путь ко всем текстовым файлам, то есть содержащим только печатные символы.




Ниже приведен список команд, которые можно использовать для поиска файла.

grep "text string to search” directory-path

grep [option] "text string to search” directory-path

grep -r "text string to search” directory-path

grep -r -H "text string to search” directory-path

egrep -R "word-1|word-2” directory-path

egrep -w -R "word-1|word-2” directory-path



Простая find может работать удобно. псевдоним в файле ~/.bashrc :

alias ffind find / -type f | xargs grep

Запустите новый терминал и выполните выпуск:

ffind 'text-to-find-here'



Пытаться:

find / -type f -exec grep -H 'text-to-find-here' {} \;

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

Для использования домашней папки:

find ~/ -type f -exec grep -H 'text-to-find-here' {} \;

Для текущей папки используйте:

find ./ -type f -exec grep -H 'text-to-find-here' {} \;






grep - ваш хороший друг, чтобы достичь этого.

grep -r <text_fo_find> <directory>

если вам не нужен случай поиска текста, то используйте

grep -ir <text_to_find> <directory>



Команда ниже подходит для этого подхода:

find ./ -name "file_pattern_name"  -exec grep -r "pattern" {} \;



Попробуй это:

find . | xargs grep 'word' -sl



Существует инструмент, который будет делать именно то, что вы ищете.

http://linux.die.net/man/1/ack

ack -i search_string folder_path/*

Вы можете игнорировать -i для поиска с учетом регистра




Related

linux text grep directory find