Как найти конкретное слово в файле на Linux

По умолчанию большинство инструментов поиска обращаются к именам файлов, а не к содержимому файлов. Однако самая известная программа поиска GNU, grep, будет искать внутри файлов с правильными флагами. Здесь мы покажем вам, как найти определенное слово(а) в файле на Linux.
Содержание
- Использование grep для поиска конкретного слова в файле
- Использование find для поиска конкретного слова в файле
- Использование ack для поиска конкретного слова в файле
- Хотите GUI? Используйте Catfish
- Часто задаваемые вопросы
Также читайте: Как найти большие файлы в Linux
Использование grep для поиска конкретного слова в файле
По умолчанию grep ищет в содержимом файлов, а также в их именах. Он включен в большинстве систем Linux и, как правило, идентичен на разных дистрибутивах. Программисты, просматривающие содержимое файлов своих проектов, могут предпочесть выполнить другую команду, такую как ack.
В зависимости от кодировки файла grep может не всегда иметь возможность заглянуть внутрь. Но для большинства текстовых форматов grep может просканировать текст файла на наличие указанного шаблона.
grep -rw '/path/to/search/' -e 'pattern'- Флаг
-rустанавливает grep в рекурсивный режим, перемещаясь по всем каталогам, содержащимся в указанном каталоге. - Флаг
-wищет полные совпадения слова. Это означает, что “red” будет соответствовать только настоящему слову “red”, а не любой строке букв, содержащей его, такой как “red undant” или “ti red.” Это делает, ищя только “red”, окруженное так называемыми символами, не являющимися частью слова (т.е. я в любом случае, что не является буквой, цифрой или подчеркиванием). - Флаг
-eпредшествует паттерну для поиска. Он поддерживает регулярные выражения по умолчанию.
Чтобы ускорить grep, вы можете использовать флаги --exclude и --include, чтобы ограничить поиск определенными типами файлов. Например, --exclude='*.csv' не будет искать внутри файлов с расширением .csv. --include='*.txt', с другой стороны, будет искать только в файлах с расширением .txt. Флаг можно добавить сразу после команды grep, как показано ниже:
grep --exclude='*.csv' -Rw '/path/to/search' -e 'pattern'Вы также можете исключить определенные каталоги, следуя формату ниже:
grep --exclude-dir='{dir1,dir2,*_old}' -Rw '/path/to/search' -e 'pattern'Эта команда не будет искать в любых каталогах в текущем рабочем каталоге с именем dir1, dir2 или подходящими под паттерн *_old, исключая их из процесса поиска. Она выполнит указанный рекурсивный поиск по полному совпадению слова во всех других файлах в текущем рабочем каталоге.
Интересные флаги, которые можно использовать с grep
Теперь, когда вы должным образом ознакомлены с grep и тем, как его использовать, вот несколько полезных флагов, которые вы можете присоединить к вашей команде:
-i– заставляет grep выполнять поиск без учета регистра. Например, поиск “Kraken” вернет результат, когда grep найдет совпадения для “kraken” или “kRaken”.-n– показывает номера строк рядом с совпадениями. Это особенно полезно для программистов или людей, просматривающих большие конфигурационные файлы.-R– как и с-r, grep выполнит рекурсивный поиск по всем подпапкам, но этот конкретный флаг будет следовать за символическими ссылками (ярлыками).-s– подавляет сообщения об ошибках. Если вы получаете много отвлекающих ошибок о файлах, которых не существует, которые нельзя прочитать или имеют неправильные разрешения, передайте это, чтобы grep мог сосредоточиться на отображении найденных совпадений.
Также читайте: Как найти файл в Linux с помощью команды Find
Использование find для поиска конкретного слова в файле
Хотя синтаксис команды find более сложен, чем grep, некоторые предпочитают его.
find . -name "*.php" -exec grep "pattern" {} ;Эта команда использует флаг -exec команды find, чтобы передать найденные файлы grep для поиска. С умело организованным синтаксисом вы можете использовать более быстрый поиск файловой системы find, чтобы найти конкретные типы файлов, в которых хотите искать, а затем передать их в grep, чтобы искать внутри файлов.
Обратите внимание, что find ищет только по именам файлов, а не по содержимому. Именно поэтому требуется grep для поиска текста и содержимого файлов. Обычные флаги grep должны быть полностью рабочими изнутри флага -exec.
Использование ack для поиска конкретного слова в файле
Команда ack, вероятно, является самым быстрым инструментом для поиска, но она не так популярна, как grep. Команда ниже будет искать в текущем каталоге.
ack 'pattern'Если вы хотите искать внутри конкретного файла или каталога, вы можете добавить этот файл или полный путь к файлу к вашему поиску.
ack 'pattern' /path/to/file.txtТакже читайте: Как установить и управлять версиями Python в Linux
Хотите GUI? Используйте Catfish
Если вы не любите терминалы, все популярные дистрибутивы Linux предлагают Catfish, универсальное графическое приложение, которое позволяет вам искать файлы и их содержимое по конкретной строке. Оно не так продвинуто, как обсуждаемые здесь команды, но предоставляет ценную услугу людям, которые предпочли бы графический интерфейс.

Чтобы искать содержимое файла на наличие конкретного слова, нажмите меню в верхнем правом углу Catfish и выберите “Поиск содержимого файлов”.
После настройки наберите то, что вы хотите искать, в верхней строке и нажмите Enter. Вот и все!
Также читайте: Различия между Su, Sudo Su, Sudo -s и Sudo -i
Часто задаваемые вопросы
Как остановить поиск grep, прежде чем он завершится?
Чтобы остановить любой текущий процесс в вашем терминале, просто нажмите Ctrl + C на вашей клавиатуре. Это отправляет сигнал на завершение запущенного процесса. Также именно поэтому вы не можете использовать обычные сочетания клавиш копирования/вставки из терминального эмулятора.
Есть ли файловые менеджеры, которые ищут содержимое файлов?
Если вы используете среду рабочего стола KDE Plasma, ее менеджер файлов по умолчанию (Dolphin) уже имеет эту возможность. Когда вы нажимаете кнопку поиска, чтобы искать файлы, есть опция выбора между именами файлов и содержимым файлов под строкой поиска.
Просто нажмите на “Содержимое”, если вы хотите искать слова внутри файлов. Это не будет так продвинутно, как использование grep, но это выполняет свою работу.
Есть ли другие применения для grep?
Grep не предназначен только для поиска в вашей файловой системе! Интересно, что вы можете использовать его в сочетании почти с любой командой, чтобы просматривать ее вывод, вместо того чтобы вручную искать что-то самостоятельно.
Grep может использоваться для фильтрации вывода команд, чтобы показать вам вещи, которые более актуальны для вас. Поиграйте с ним достаточно, и в конечном итоге вы освоите искусство диагностики и знакомства с вашим компьютером!
Все скриншоты сделаны Мигелем Лейвой-Гомесом.