Команда grep в Linux

Опубликовано admin - пт, 05/06/2022 - 05:21

Утилита командной строки Linux grep даёт возможность найти текст в указанном файле. Можно также передать вывод любой команды в grep, что значительно упрощает поиск.

Команда grep Linux

Содержание

Синопсис

grep [ПАРАМЕТР]… ШАБЛОНЫ [ФАЙЛ]…

Поиск шаблонов в каждом файле.

Пример:

grep -i 'hello world' menu.h main.c

Шаблонов можно указать несколько, разделяя их символом новой строки.

Опции

Шаблон выбора и его интерпретация:

-E
шаблоны — расширенные регулярные выражения
-F
шаблоны — строки
-G
шаблоны — простые регулярные выражения
-e
использовать шаблоны для поиска
-f
брать шаблоны из файла
-i
игнорировать различие регистра
-w
совпадение обязательно с целым словом
-x
совпадение обязательно с целой строкой
-z
строки разделяются байтом с нулевым значением, а не символом конца строки
-s
не показывать сообщения об ошибках
-v
выбирать не подходящие строки
-V
показать информацию о версии и закончить работу
--help
показать эту справку и закончить работу
-m
остановиться после указанного числа совпавших строк
-b
печатать вместе с выходными строками смещение в байтах
-n
печатать номер строки вместе с выходными строками
-H
печатать имя файла для каждой выводимой строки
-h
не начинать вывод с имени файла
-o
показывать только совпавшие непустые части строк
-q
подавлять весь обычный вывод
-r
то же, что и --directories=recurse
-R
тоже, но с переходом по всем символьным ссылкам
-L
печатать только имена файлов без выбранных строк
-l
печатать только имена файлов с выбранными строками
-c
печатать только количество выбранных строк на файл
-T
выравнивать табуляцией (если нужно)
--color[=КОГДА]
использовать маркеры для различия совпадающих строк; когда может быть «always» (всегда), «never» (никогда) или «auto» (автоматически)

Если в качестве файла указан символ -, то читается стандартный ввод. Если файл не указан, то читается текущий каталог .  и - в противномслучае. Если указано менее двух файлов, то предполагается -h. При нахождении совпадений любой строки кодом завершения будет 0 и 1, если ничего не совпало. При возникновении ошибок и если не указан параметр -q, кодом завершения будет 2.

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

Передача вывода ls в grep

Уже описаннная и очень популярная команда ls выводит список файлов и каталогов

oleg@mobile:~:$ ls
abc.txt       build/    Documents/        FreeShip-3.5.2.45_x86-64/  photo/         slimthemes/  webprojects/  www/          Документы/
aur/          cache/    Downloads/        GNUstep/                   recode/        Slovoeb/     webupload/    xep/          Загрузки/
backgrounds/  Desktop/  EtxtAntiplagiat/  Mail/                      Sape/          store/       wifi/         XEP/
bin/          docs/     FreeShip/         mailbox/                   skype-export/  tmp/         work/         Yandex.Disk/
oleg@mobile:~:$ 

При поиске определённого каталога или файла можно передать вывод команды ls в grep через вертикальную черту |, передав при этом grep необходимое слово.

oleg@mobile:~:$ ls ~/webprojects/linuxcookbook.ru/img/ | grep linux-grep-command.png
linux-grep-command.png
oleg@mobile:~:$ 

При отсутствии этого слова команда grep ничего не возвращает.

При поиске не одного слова, а словосочетания или предложения, параметр команды выделяется одинарными или двойными кавычками.

leg@mobile:~:$ ls ~/Документы/ | grep 'My Drawings'
My Drawings/
oleg@mobile:~:$ 

Команду grep можно, конечно, использовать самостоятельно.

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

Для поиска слова в текстовом файле достаточно ввести команду:

$ grep ШАБЛОН [файл]

где

запрос
слово, которое необходимо найти
файл
файл, в котором выполняется поиск слова
oleg@mobile:~/www/backuplinode:$ grep max_connections my.cnf
max_connections = 30
oleg@mobile:~/www/backuplinode:$

Поиск по нескольким параметрам

Команда grep может осуществлять поиск по нескольким параметрам. Для этого перед каждым аргументом указывается ключ -e. Команда выводит в этом случае все вхождения указанных слов.

oleg@mobile:~/www/backuplinode:$ grep -e max_connections -e innodb_buffer_pool_size my.cnf 
max_connections = 30
innodb_buffer_pool_size = 512M
oleg@mobile:~/www/backuplinode:$ 

Рекурсивный поиск

В этом случае команда grep запускается с ключом -r. Команда выведет все файлы, где найдено совпадение с указанным шаблоном, а также путь к ним. По умолчанию поиск ведется по текущей директории и поддиректориях.

oleg@mobile:~:$ grep -r linux-grep-command.png webprojects/linuxcookbook.ru/
webprojects/linuxcookbook.ru/articles/grep:oleg@mobile:~:$ ls ~/webprojects/linuxcookbook.ru/img/ | grep linux-grep-command.png
webprojects/linuxcookbook.ru/articles/grep:linux-grep-command.png
oleg@mobile:~:$ 

Частота появления слова в тексте

Для этого используется опция -c:

oleg@mobile:~:$ grep -r -c Linux webprojects/linuxcookbook.ru/articles/komanda-ls-linux 
15
oleg@mobile:~:$

Доступ к системной информации

Определение модели компьютера:

ocat /proc/cpuinfo | grep -i 'Model'grep -i 'Model'
model        : 42
model name    : Intel(R) Pentium(R) CPU B950 @ 2.10GHz
model        : 42
model name    : Intel(R) Pentium(R) CPU B950 @ 2.10GHz
oleg@mobile:~:$ 

Заключение

При работе с большим количеством текстовых файлов команда grep чрезвычайно полезна. Эта простая универсальная утилита имеет множество полезных функций. Даже начинающие пользователи Linux быстро понимают то, что она значительно повышает производительность труда.

Поделиться с друзьями