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». Как вы успели заметить, что даже поиск по содержимому файлов может быть разным и четко соответствовать вашим требованиям.

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

Как установить Gnome 3, что такое графическая оболочка Gnome Shell
Linux

Как установить Gnome 3, что такое графическая оболочка Gnome Shell

Linux

Как я могу измерить фактическое использование памяти приложением или процессом?

Linux

Какой самый простой способ отправить зашифрованное письмо?

Linux

Как узнать максимальное количество потоков на процесс в Linux?

×