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 *
Свежие комментарии