Linux

Поиск файла по содержимому в Linux. Поиск текста в файлах Linux

Иногда в Linux нужно осуществить поиск файла по содержимому. Такие случаи возникают, когда вы точно знаете, что на устройстве есть файл с определенным содержимым, но не помните, где он располагается. Если просто перепроверять все папки и файлы системы, то можно потратить уйму времени. 

Для такого поиска в Linux есть простая, но очень мощная утилита «grep». Поиск по содержимому файлов в Linux — это лишь малая часть способностей этой утилиты.

Поиск по содержимому файлов в Linux  с помощью утилиты «grep»

Использовать утилиту «grep» не означает, что нужно что-то  дополнительно устанавливать в Linux. В большинстве популярных дистрибутивов «grep» является встроенной утилитой. Ваша задача при ее использовании — это правильно сформировать команду в терминале. Если овладеть этой утилитой, тогда в Linux можно будет:

  • осуществлять поиск по содержимому файлов, используя одно слово или целое выражение;

  • осуществлять поиск файлов, используя регулярные выражения;

  • фильтровать вывод файлов;

  • фильтровать выводимый текст;

  • читать логи;

  • выводить идентификаторы запущенных процессов; 

  •  и мн. др.

Утилита «grep»

Использование утилиты «grep» формируется по следующему шаблону:

$ grep [описание условий] шаблон [название документа или место поиска…]

Либо по такому шаблону:

$ исполняемая инструкция или место поиска | grep[описание условий] шаблон

Разберем формирование шаблонов утилиты «grep»:

  • «описание условий» здесь описываются все дополнительные условия или режимы вывода, например: количество файлов, количество строк, режим инверсии и др.;

  • «шаблон» здесь описывается содержимое искомого файла или регулярное выражение;

  • «место поиска, название документа, исполняемая инструкция» здесь можно указать где и как утилита «grep» должна искать, к примеру во всей системе, либо в конкретном каталоге или файле и др.

 Перечень основных опций утилиты «grep»

Основные опции утилиты «grep» помогает ее очень эффективно использовать. К ним относят:

  • «-b» показывает нумерацию блока перед строкой;

  • «-с» считает вхождения с шаблоном, заданным в команде;

  • «-h» указывает, что не нужно выводить название найденного файла;

  • «-i» указывает, что при поиске не нужно учитывать регистр;

  • «-l» указывает, что нужно вывести только названия файлов, где есть вхождения, а не сами файлы;

  • «-n» выводит номер строки файла, где есть вхождение с шаблоном;

  • «-s» указывает, что не нужно выводить уведомления об ошибках;

  • «-v» определяет инвертированный поиск, то есть выводит всё содержимое файла, исключая выражение из шаблона команды;

  • «-w» ищет конкретное слово, обозначенное пробелами с двух сторон;

  • «-е» указывает, что в шаблоне используется регулярное выражение;

  • «-r» указывает, что поиск будет рекурсивный;

  • и др.

Поиск по содержимому файлов в Linux на практике

Допустим, что у нас есть некий документ, где собраны тысячи логинов наших пользователей. Если вам нужно найти конкретный логин в этом файле, тогда команда «grep» будет выглядеть вот так:

$ grep Login /etc / logindoc

где:

  • «Login» это искомый логин пользователя;

  • «/etc /logindoc» это путь к конкретному документу, в котором нужно осуществить поиск.

Например, вам нужно вывести логин пользователя, но вы  не знаете в каком конкретном документе он располагается, а все логины пользователей раскинуты в несколько файлов. Для этого нужно применить рекурсивный поиск по всем файлам определенного каталога. В этом случае команда «grep» может выглядеть вот так:

$grep -r "Логин, который ищем" /etc/loginfolder/

Если запустить вышеописанную команду, тогда в выводе вы получите подробный результат:

  • путь расположения документа, где обнаружено вхождение;

  • название документа, в котором обнаружено вхождение.

На практике такой подробный результат только мешает, поэтому можно использовать опцию «-h», чтобы название документа не выводилось.

Дело в том, что когда вы ищете  конкретное слово в документах, например имя вашего сотрудника «Дормидонт», тогда в результатах «grep» будут попадаться такие результаты:

  • Дормидонт456;

  • Дормидонтович;

  • 665дормидонт;

  • и др.

То есть поиск будет не чистым, так как в результатах вы получите все совпадения с искомым словом. Если вам нужно найти совпадения с конкретным словом, без лишних «примесей», тогда нужно воспользоваться опцией «-w». Команда «grep» может быть такой:

$ grep -w "Дормидонт" имя_документа_где_искать

А если у вас сотрудников с именем Дормидонт несколько десятков, а вам нужен конкретный, например Дормидонт Платонович, тогда вы можете воспользоваться от такой конструкцией утилиты «grep»:

$ grep -w "Дормидонт|Платонович" имя_документа_где_искать

Но может быть и обратная ситуация. Например, вы хотите узнать, сколько в конкретном документе у вас строк с именем "Дормидонт". Для этого можно внутри команды «grep» включить счетчик с помощью опции "-с". Тогда команда будет выглядеть вот так:

$ grep -c "Дормидонт" имя_документа_где_искать

Если возникла такая ситуация, что вам нужно вывести строки, которые не содержат искомое слово. В этом случае вы можете использовать инвертированный поиск, который активируется опцией "-v". Тогда команда может выглядеть вот так:

$ grep -v "Дормидонт" имя_документа_где_искать

Допустим, вам нужно выполнит масштабный поиск в системе и вывести все файлы, а не строки, где есть совпадения в содержимом. В этом случае вам нужно воспользоваться  опцией "-l". Тогда команда будет выглядеть вот так: 

$ grep -l "Дормидонт" *.c

Заключение

В Linux поиск по содержимому файлов организован очень достойно, благодаря утилите «grep». Как вы успели заметить, что даже поиск по содержимому файлов может быть разным и четко соответствовать вашим требованиям.

Схожие статьи

Что такое сетевой сканер Ubuntu, как его правильно настроить
Linux

Что такое сетевой сканер Ubuntu, как его правильно настроить

Linux

Как определить, заражен ли мой Linux-бокс?

Лучшие нативные и консольные игры для Linux, какие из них на нее идут
Linux

Лучшие нативные и консольные игры для Linux, какие из них на нее идут

Linux

Как просмотреть сетевую таблицу маршрутизации в Ubuntu?