Сегодня в статье рассмотрим как можно выполнить поиск текста в файлах на Linux.

Возникаю такие ситуации, когда необходимо найти текст в файле или же какой либо файл. В Linux всё это можно сделать с помощью утилиты grep.

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

grep (global regular expression print) – одна из самых востребованных команд в терминале Linux, которая входит в состав проекта GNU. Grep в считанные секунды найдёт файл, или текст в файле, или отфильтрует вывода другой утилиты.

ОПЦИИ

Давайте рассмотрим самые основные опции утилиты grep, которые помогут нам выполнять поиск текста в файлах:

  • -b – показывать номер блока перед строкой;
  • -c – подсчитать количество вхождений шаблона;
  • -h – не выводить имя файла в результатах поиска внутри файлов Linux;
  • -r – рекурсивный поиск;
  • -i – не учитывать регистр;
  • – l – отобразить имена файлов, в которых найден шаблон;
  • -n – показывать номер строки в файле;
  • -s – не показывать сообщения об ошибках;
  • -v – инвертировать поиск, выдавать все строки кроме тех, что содержат шаблон;
  • -w – искать шаблон как слово, окружённое пробелами;
  • -e – использовать регулярные выражения при поиске;
  • -An – показать вхождение и n строк до него;
  • -Bn – показать вхождение и n строк после него;
  • -Cn – показать n строк до и после вхождения.

Примеры использования

Давайте рассмотрим несколько примеров поиска текста внутри файлов с помощью grep.

Поиск текста в файле

В первом примере мы будем искать пользователя smirnov в файле расположенных по пути /home/passwd:

 grep smimrnov /home/passwd

Данная команда выдаст приблизительно вот такой результат:

/etc/passwd-:smirnov:x:1000:1000:Oleg Smirnov,,,:/home/smirnov:/bin/bash

Из данного вывода мы видим, что команда grep обнаружила в файле /etc/passwd пользователя smirnov и вывела сопутствующею информацию.

Поиск текста в файлах и директориях.

Давайте попробуем найти искомую комбинацию obu4alka.ru во всех файлах расположенных в директории /etc/nginx и её поддиректориях. Для этого нам необходимо воспользоваться рекурсивным поиском, опция -r:

grep -r "obu4alka.ru" /etc/nginx/

В выводе вы получим:

/etc/nginx/sites-available/obu4alka.ru.conf:    server_name obu4alka.ru *.obu4aka.ru;
/etc/nginx/sites-available/obu4alka.ru.conf:    root        /home/admin/www/obu4alka.ru/public_html;
/etc/nginx/sites-available/obu4alka.ru.conf:    access_log  /var/log/nginx/obu4alka.ru.access.log combined;
/etc/nginx/sites-available/obu4alka.ru.conf:    error_log   /var/log/nginx/obu4alka.ru.error.log error;
....

Поиск текста в файлах определенного слова.

Если вы ищете определённое слово в файлах, например mytext, то grep выведет также 123mytext, mytext123, 12mytext34 и тому подобные комбинации. Вы можете заставить утилиту искать по содержимому файлов в Linux только те строки, которые выключают искомые слова, воспользовавшись опцией -w:

grep -w "mytex" имя_файла

Поиск текста в файлах двух слов

Можно искать по содержимому файла не одно слово, а сразу два:

egrep -w 'smirnov|root' /etc/passwd

Команда выдаст результат по двум запросам:

root:x:0:0:root:/root:/bin/bash
smirnov:x:1000:1000:Oleg Smirnov:/home/smirnov:/bin/bash

Вывод имени файла

Вы можете указать grep выводить только имя файла, в котором было найдено заданное слово с помощью опции -l. Например, следующая команда выведет все имена файлов, при поиске по содержимому которых было обнаружено вхождение function:

grep -l 'function' /home/admin/www/obu4alka.ru/public_html/*.php

Цветной вывод поиска в grep

Также вы можете заставить программу выделять другим цветом вхождения в выводе:

grep --color root /etc/passwd
root:x:0:0:root:/root:/bin/bash

Примеры использования grep

# вывести все данные на экран, кроме закомментированных строк cat ./file.txt | grep -v '^#'
# вывести все данные на экран, кроме пустых строк
cat ./file.txt | grep -v '^$'
# вы можете прочитать разом все файлы и сделать фильтр grep
cat * | grep 'текст для поиска'
# поиск по целому слову
egrep -w  "SELECT" *
поиск в списке файлов
ls -i | grep -i text
# рекурсивный поиск по всем папкам внутри родительской папки
grep -R text *

Сегодня мы с вами рассмотрели использование команды grep для поиска и фильтрации вывода команд в операционной системе Linux. При правильном применении эта утилита станет мощным инструментом в ваших руках.

[endtxt]

RSS

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

0 0 голоса
Рейтинг статьи

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам:

Продолжая пользование настоящим сайтом Вы выражаете своё согласие на обработку Ваших персональных данных (файлов cookie) с использованием трекеров "Google Analytics" и "Yandex.Metrics". Порядок обработки Ваших персональных данных, а также реализуемые требования к их защите, содержатся в Политике конфиденциальности.
Принять