- Использование grep¶
- Вывести несколько строк¶
- Регулярные выражения в grep¶
- Рекурсивный поиск фрагмента в файлах.¶
- Поиск слов в grep¶
- Поиск двух слов¶
- Количество вхождений строки¶
- Инвертированный поиск в grep¶
- Вывод имени файла¶
- Цветной вывод в grep¶
- grep — поиск в Linux, примеры
- 2. Базовый синтаксис команды grep
- 3. Как использовать grep для поиска в файлах
- 4. Рекурсивное использование grep
- 5. Использование grep для поиска только целых слов
- 6. Как искать несколько различных слов
- 7. Подсчет количества строк, содержащих вхождение
- 8. Инвертный поиск
- 9. Как выводить только имена файлов в которых есть включение слова
- 10. Поиск всех файлов содержащих слово во всех файлах и поддиректориях
- 11. Вывод строк перед и после найденного вхождения
Использование grep¶
В первом примере мы будем искать пользователя User в файле паролей Linux. Чтобы выполнить поиск текста grep в файле /etc/passwd введите следующую команду:
В результате вы получите что-то вроде этого, если, конечно, существует такой пользователь:
User:x:1000:1000:User. /home/User:/bin/bash
А теперь не будем учитывать регистр во время поиска. Тогда комбинации ABC, abc и Abc с точки зрения программы будут одинаковы:
Вывести несколько строк¶
Например, мы хотим выбрать все ошибки из лог-файла, но знаем, что в следующей строчке после ошибки может содержаться полезная информация, тогда с помощью grep отобразим несколько строк. Ошибки будем искать в Xorg.log по шаблону «EE»:
$ grep -A4 "EE" /var/log/xorg.0.log
Выведет строку с вхождением и 4 строчки после неё:
$ grep -B4 "EE" /var/log/xorg.0.log
Выведет целевую строку и 4 строчки до неё:
$ grep -C2 "EE" /var/log/xorg.0.log
Выведет по две строки с верху и снизу от вхождения.
Регулярные выражения в grep¶
Регулярные выражения grep — очень мощный инструмент в разы расширяющий возможности поиска текста в файлах. Для активации этого режима используйте опцию -e. Рассмотрим несколько примеров:
Поиск вхождения в начале строки с помощью спецсимвола «^», например, выведем все сообщения за ноябрь:
$ grep "^Nov 10" messages.1 Nov 10 01:12:55 gs123 ntpd[2241]: time reset +0.177479 s Nov 10 01:17:17 gs123 ntpd[2241]: synchronized to LOCAL(0), stratum 10
Поиск в конце строки — спецсимвол «$»:
$ grep "terminating.$" messages Jul 12 17:01:09 cloneme kernel: Kernel log daemon terminating. Oct 28 06:29:54 cloneme kernel: Kernel log daemon terminating.
Найдём все строки, которые содержат цифры:
Рекурсивный поиск фрагмента в файлах.¶
$ grep -r "mydomain.com" /etc/apache2/
Кавычки позволяют искать полное соотвествие с заданным шаблоном. Пример:
$ grep -r "zendsite" /etc/apache2/ /etc/apache2/vhosts.d/zendsite_vhost.conf: ServerName zendsite.localhost /etc/apache2/vhosts.d/zendsite_vhost.conf: DocumentRoot /var/www/localhost/htdocs/zendsite /etc/apache2/vhosts.d/zendsite_vhost.conf:
Здесь перед найденной строкой указано имя файла, в котором она была найдена. Добавление параметра -n добавляет к выводу номер строки в файле, где найден заданный шаблон поиска. Вывод имени файла легко отключить с помощью опции -h:
$ grep -h -r "zendsite" /etc/apache2/ ServerName zendsite.localhost DocumentRoot /var/www/localhost/htdocs/zendsite
Это будет искать только те файлы, у которых есть.c или.h расширения:
$ grep --include=\*.c,h> -rnw '/path/to/somewhere/' -e "pattern"
Это исключает поиск всех файлов, заканчивающихся расширением.o:
$ grep --exclude=*.o -rnw '/path/to/somewhere/' -e "pattern"
Для каталогов можно исключить конкретный каталог через параметр –exclude-dir. Например, это исключает dir1/, dir2/dir2 и все из них, соответствующие * .dst/:
$ grep --exclude-dir=dir1,dir2,*.dst> -rnw '/path/to/somewhere/' -e "pattern"
Поиск слов в grep¶
Когда вы ищете строку abc, grep будет выводить также kbabc, abc123, aafrabc32 и тому подобные комбинации. Вы можете заставить утилиту искать по содержимому файлов в Linux только те строки, которые выключают искомые слова с помощью опции -w:
Поиск двух слов¶
Можно искать по содержимому файла не одно слово, а два сразу:
$ egrep -w 'word1|word2' /path/to/file
Количество вхождений строки¶
Утилита grep может сообщить, сколько раз определённая строка была найдена в каждом файле. Для этого используется опция -c (счетчик):
Инвертированный поиск в grep¶
Команда grep Linux может быть использована для поиска строк в файле, которые не содержат указанное слово. Например, вывести только те строки, которые не содержат слово пар:
Вывод имени файла¶
Вы можете указать grep выводить только имя файла, в котором было найдено заданное слово с помощью опции -l. Например, следующая команда выведет все имена файлов, при поиске по содержимому которых было обнаружено вхождение primary:
Цветной вывод в grep¶
Также вы можете заставить программу выделять другим цветом вхождения в выводе:
$ grep --color root /etc/passwd
© Copyright 2020 Revision 10618177 .
Versions latest Downloads pdf html epub On Read the Docs Project Home Builds Free document hosting provided by Read the Docs.
grep — поиск в Linux, примеры
Команда grep (global regular expression print) остается одной из наиболее универсальных команд в окружении командной строки Linux. Это происходит потому что grep является чрезвычайно мощной утилитой которая дает пользователям возможность сортировать ввод на основе сложных правил, тем самым делая ее популярным связующим звеном в конвейере команд. Grep в основном используется для поиска текста как в данных поступающих на стандартный вход, так и в указанных файлах на предмет строк содержащих указанные слова или подстроки.
2. Базовый синтаксис команды grep
Ниже представлены примеры использования grep с базовым синтаксисом:
grep 'word' filename grep 'word' file1 file2 file3 grep 'string1 string2' filename cat otherfile | grep 'something' command | grep 'something' command option1 | grep 'data' grep --color 'data' fileName
3. Как использовать grep для поиска в файлах
Попробуем найти пользователя «vasya» в файле passwd. Для поиска в файле /etc/passwd информации о пользователе «vasya» необходимо использовать следующую команду:
Также мы можем попросить grep осуществлять поиск игнорируя регистр букв, то есть не делая различия между большими и маленькими буквами. Для этого используется параметр -i, как показано ниже:
4. Рекурсивное использование grep
Если у вас есть большое количество текстовых файлов в ряде директорий и поддиректорий, к примеру, конфигурационных файлов apache в /etc/apache2 и требуется найти файл где содержится определенный текст, то стоит использовать параметр -r чтобы осуществить рекурсивный поиск. То есть поиску будет осуществлен по всем файлам в иерархии директорий:
grep -r "domain.tld" /etc/apache2/
Также можно использовать этот параметр в верхнем регистре. То есть можно писать -R. Разница в том что при использовании -r не происходит обработка символических ссылок, а при использовании -R — происходит. Пример использования:
/etc/apache2/sites-available/debian-help.ru: ServerName debian-help.ru /etc/apache2/sites-available/debian-help.ru: ServerAlias www.debian-help.ru
Как можно видеть результат состоит из имени файла, где была найдена строка и самой строки. Включение в вывод имен файлов можно с легкостью подавить с помощью параметра -h, как показано ниже:
grep -r -h debian /etc/apache2/
ServerName debian-help.ru ServerAlias www.debian-help.ru
5. Использование grep для поиска только целых слов
Когда вы ищите qwe, grep выберет все вхождения данного сочетания, к примеру, qwerty, qwe123, 345qwerty и множество других комбинаций. Вы можете указать, чтобы grep выбирал только те строки, которые содержат точное включение в виде целого слова. Для этого используйте параметр -w:
6. Как искать несколько различных слов
Для поиска двух или более различных слов вы можете использовать команду egrep следующим образом:
egrep -w 'first_word|second_word' filename
Либо вариант с просто grep:
grep -w 'first_word\|second_word' filename
7. Подсчет количества строк, содержащих вхождение
grep может сообщать сколько строк содержат указанное сочетание. Для этого воспользуйтесь параметром -c (count):
В дополнение, можно использовать параметр -n чтобы заставить grep выводить номера строк в файле, в которых было найдено включение:
8. Инвертный поиск
grep позволяет осуществлять поиск наоборот, то есть будут выведены все строки, кроме имеющих вхождение указанного слова и для этого используется параметр -v:
Можно исключить что-либо из вывода поиска применив конвейер:
grep 'first_word' filename | grep -v 'second_word'
9. Как выводить только имена файлов в которых есть включение слова
Для вывода только имен файлов нужно использовать параметр -l, к примеру, так:
10. Поиск всех файлов содержащих слово во всех файлах и поддиректориях
Если вам нужно осуществить поиск слова в любых формах во всех файлах в этой директории и всех содержащихся в ней тоже, то используйте сочетание описанных выше параметров:
11. Вывод строк перед и после найденного вхождения
Для вывода нескольких строк перед вхождением используется параметры -A, а после вождения -B.
К примеру, чтобы вывести 5 строк перед и 10 после найденного вхождения используйте команду:
grep -A 5 -B 10 'word' filename