Как найти файлы, содержащие определённый текст (строку), в Linux

Как найти определённую строку в разных файлах, найти строку в файлах разных типов в каталоге или исключить определённые каталоги? Это распространённые проблемы, с которыми можно столкнуться при работе в Linux.
Чтобы помочь новичкам в Linux, мы покажем вам, как быстро выполнить эту задачу в Linux без дополнительных инструментов, используя только встроенную команду.
Поиск всех файлов, содержащих определённую строку, в Linux
В Linux существует несколько способов поиска файла, содержащего определённую строку. В этой статье мы сосредоточимся на команде grep, которая позволяет легко находить файлы разных типов и выполнять простое сопоставление с образцом для поиска нужного текста (или строки).
Для демонстрации я уже создал два текстовых файла и буду искать в них вхождение строки проблема с помощью следующей команды:
$ grep -Rnw file1.txt file2.txt -e 'problem'
Как видите, нам удалось найти совпадающую строку в обоих файлах, она выделена красным.
Чтобы понять, какой параметр мы использовали в команде, ознакомьтесь с ним ниже.
-rили-Rиспользуется для рекурсивного поиска.-nиспользуется для указания номера строки, в которой находится соответствующая строка.-wиспользуется для поиска целых слов, а не подстрок.-e— это шаблон, используемый при поиске.
Помимо этого варианта, вы можете выбрать и другие.
-l(строчная буква «L«) может использоваться для указания имени файла, соответствующего запросу.--includeможет использоваться для поиска только определенных файлов.--excludeможет использоваться для исключения определенных типов файлов из поиска.--exclude-dirможет использоваться для исключения определенных каталогов при поиске файлов.
Вот ещё несколько примеров использования командной строки, которые помогут вам узнать больше о различных способах поиска определённой строки в файлах.
1. Найдите строки pattern во всех текстовых файлах, находящихся в текущем каталоге.
$ grep -Rnw *.txt -e "pattern"
2. Найдите строки pattern во всех текстовых файлах, находящихся в каталоге ~/Documents .
$ grep -Rnw ~/Documents/*.txt -e "pattern"
3. Найдите строки pattern во всех PHP-файлах, находящихся в каталоге /var/www/html .
$ grep -Rnw /var/www/html/*.php -e "pattern"
4. Найдите строки pattern во всех PHP- и текстовых файлах, находящихся в каталоге /var/www/html .
$ grep --include=\*.{php,txt} -rnw '/var/www/html' -e "pattern"
5. Найдите строки pattern во всех файлах, кроме текстовых файлов, находящихся в каталоге /var/www/html .
$ grep --exclude=\*.txt -rnw '/var/www/html' -e "pattern"
6. Найдите строку pattern во всех файлах, находящихся в каждом каталоге по адресу /var/www/html, кроме каталогов со стилями и изображениями.
$ grep --exclude-dir={style,image} -rnw '/var/www/html/' -e "pattern"
7. Найдите строки pattern во всех текстовых файлах, находящихся в текущем каталоге, но вместо вывода абзаца выведите имя файла, в котором есть указанная строка.
$ grep -Rnwl *.txt -e "pattern"
Вот и всё.
Редактор: AndreyEx