Утилита командной строки Linux grep даёт возможность найти текст в указанном файле. Можно также передать вывод любой команды в grep, что значительно упрощает поиск.
Содержание
Синопсис
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 быстро понимают то, что она значительно повышает производительность труда.